スキル詳細
設計・開発手法
ドメイン駆動設計
学習のために, を読んでいます. 業務では, DDD が浸透していない環境の中で乱用することは避けつつ, 説明のつきやすい Entity + Value Object を用いた表現のみを採用していました.
個人開発では, Laravel プロジェクトで戦術的 DDD を取り入れました. 結果, コード量が増大することやどう捉えても冗長なコードが表れる問題はありつつも, 整然としたコードが実現できることを感じました.
これらを踏まえて, 複数人が関係するプロジェクトでは, 厳密なクリーンアーキテクチャに固執する必要はないと考えています. 方法論にこだわりすぎず, ドメインのコンテキストを理解して疎結合・高凝集なコードに表現することが重要だと考えています.
テスト駆動開発
を読了し, PHP に関わり始めたころに和田卓人さんの講演を聴講した経験から, 私の開発の軸になっています. サーバーサイドの開発においては, 自動テストがない環境での開発は考えられない程に定着しています.
この開発手法は, テストコードを用いた, Red-Green-Refactoring のサイクルを回すことだと理解しています. 自動テストによってコードの正常性を担保し, 変更を恐れずにリファクタリングを行います. 業務においても, 「動いているコードは触らない」ではなく, 動いているコードこそ安全に保守すべきと考えています.
言語
PHP
現職でサーバーサイド言語として採用しており, 個人開発でも使用しています.
2年前に転職してから PHP を使い始めました. 当時のプロジェクトでは PHP 7.3 を採用していたため, それ以降の文法を習得しています.
型安全なコーディングを意識して, IDE による型補完を活用した開発を行っています.
フレームワーク
|name|version| |:--|:--| |Laravel|6 - 8| |Slim|2, 3|
Laravel を業務及び個人開発で使っています. 業務では Laravel で実装されているアプリケーションのレビュアーやアーキテクチャ設計も担当しています. 公式ドキュメントに記載された基本的な機能は問題なく使うことができ, 必要に応じて Laravel 本体のソースを読み, 拡張することができます.
Slim では, 業務・個人開発ともに小規模なアプリケーションの構築に採用しました. Twig テンプレートを利用した画面を提供するアプリケーションと, シンプルな API を提供するアプリケーションの構築経験があります.
JavaScript / TypeScript
業務では JavaScript, 個人の開発では TypeScript を利用しています.
フロントエンドフレームワークを利用して, コンポーネントの作成や小規模な SPA の構築ができます. 後述する NodeCG を利用した個人開発が多いため, コンポーネント設計については業務経験を積むことが今後の課題です. アトミックデザインについて学んだことはありますが, 実践したことはありません.
フレームワーク
|name|version| |:--|:--| |React|17-| |Vue.js|2|
React は個人開発で採用しています. Vue.js は個人開発で利用していましたこともありますが, 最近は業務でのみ使用しています.
個人開発では TypeScript で実装しています. Vue.js 2 + TypeScript での開発を1年ほど経験した後, Vue.js 3 への移行前に React の学習を始め, 現在は React を採用しています.
モジュールバンドラについては, Vue.js のプロジェクトでは Parcel を使用していました. 最近採用している React のプロジェクトでは Webpack を使用しています.
Node.js
業務で簡単なスクリプトを作成することはありますが, 主に NodeCG による配信オーバーレイ開発のために使用します. Node.js においても TypeScript を使用し, 型安全なコードでの開発を行っています.
フレームワーク
|name|version| |:--|:--| |NodeCG|1.1-|
NodeCG は express ベースの Web フレームワークで, 映像配信のオーバーレイ開発を目的としている OSS のフレームワークです. 趣味である RTA のイベント運営において, 動的に表示内容を変更するオーバーレイ開発に利用しています.
2017 年に日本の RTA イベントで採用されていたことでフレームワークを知り, それ以降自身でも NodeCG を用いたオーバーレイ開発に取り組みました. NodeCG レイアウトを開発し, 自身で主催・運営している RTA イベントで活用しています. 国内での利用実績が少ないため, Qiita・Zenn での記事公開や, 公式の Discord サーバーで情報発信するなど, フレームワークの普及に取り組んでいます.
その他経験のある言語
- Java
- 基本的な文法やプログラミングを学んだ言語です.
- 転職してからは使用する機会が減っていましたが, 最近改めて Java の静的型付けに魅力を感じ, Spring Boot を用いたアプリケーション開発を始めています.
- Stream やラムダ式などは問題なく使えますが, Java 9 以降に追加された機能については経験が少ないです.
- Python3
- django 2 で構築されたアプリケーションを改修し, AWS 上にホストして運用したことがある程度です.
- 学生時代の講義では Flask でのアプリケーション開発を学びました.