プロトタイプから完全なMVP(Minimum Viable Product:実用最小限のプロダクト)までカバーするフルスタック開発者のことを「多芸は無芸」と評価する人もいます。そんな一面もあるでしょう。まずは、フルスタック開発者を知るために、歴史を振り返ります。
以前のフルスタック開発者
2000年ごろ(インターネットでの17年前は大昔です)のフルスタック開発者の定義はこんな感じでした。
- Photoshop、FireworksなどAdobe系ツールでWebページを手早く作る
- デザインをHTMLやCSSに変換し、画像にホットスポットを追加する(もはや忘却のかなたですか?)
- 簡単なPHP4.0スクリプト(当時のPHPはオブジェクト指向とは無縁)でサーバーサイドのロジックを組む
- ダイナミックデータを少し最適化して、すべてMySQLで保存する
- MySQLのデータをFTPでサーバーにアップロードして給料をもらう
メモ:これはPHPのフルスタック開発者に関する記述です。FlashやColdfusionの開発手順とは異なりますが、似たようなものです。
シンプルだった時代のいい思い出です。1人だけのWeb制作会社が点在し、仕事のあとに家族との時間が持てました。
現在はどうでしょうか?
現在のフルスタック開発者に求められるもの
いまはめったに子供に会えないような悲劇が起こる時代です。なぜこんな世界になってしまったのでしょう?
モノがあふれる市場で競争を強いられる開発者は、完璧主義になり「自分ですべてやらなければ、思いどおりにはならない」と、他人に任せるのをためらいます。業務にかかわるすべての技術を習得するため、フルスタック開発者は以下のような技能が必要になるのです。
サーバー管理と開発
開発者はサーバー管理の基本的な知識が必要です。例を示します。
- GUIを使わずにターミナルでリモートサーバーに接続
- 基本的なシェルスクリプトを書く
- サーバー上でユーザーとグループを管理
- ApacheやNginxなどのサーバープログラムを管理してアプリを提供
- ファイヤーウォールとパーミッションを管理
- 新しいソフトウェアのインストールとディストリビューションの更新
上記の基本を押さえつつ、DockerやVagrantなどのバーチャルマシン上に独立した開発環境を構築する方法も理解します。
さらにバージョン管理システムを使いこなしてバックアップを作成し、複数人で共有できるコードレポジトリーを用意する知識も求められます。失敗がないのは当然で、時系列の変更履歴も必要です。
クラウド
どのようなサーバーを使うかに関わらず、Heroku、Google Cloud、Azure、AWSなどのプラットホームにホストできるクラウドの知識も欲しいところです。
評判が先行しているだけで役に立たないプラットホームやツールも存在しますが、注目度の高いサービスに通じているのは長い目で見て有益です。クライアントからプロバイダーの変更を要求されるか分かりません。主要クラウドホストに対応したデプロイガイドの決定版で備えます。
バックエンド
バックエンドは、特定の言語(この記事ではPHPと多くのフレームワークとCMS)を知っていることに加え、以下の知識が必要です。
- DevOpsにつながるNginxやApacheなどのWebサーバー
- JavaScriptやCSSなどのアセットを静的にホストできるようコンパイルするため、Nodeが必要(PHPで代替も可能)
- ComposerをはじめPHPのパッケージ依存管理ツールなしでは現代の開発環境は成立しない
- 優れたAPIデザイン。現代のWebサイトはAPIベースで構築され、分離されたフロントエンドと会話する(後述)
- ElasticSearchのような検索エンジンはパフォーマンスのカギ
- GearmanなどのツールやCrunzなどのライブラリーを使ったcronjobsやバックグラウンドジョブ
- Varnish、Redisなどのキャッシュツールでホスティング費用を安くする知識。この知識の有無がプロジェクトの成否を分けることもある
データベース
データベースは独立した項目にしました。リレーショナルデータベース(MySQLやPostgreSQL)のスキーマは大きく変わりません。開発者にはMongoDBやRedis、CassandraなどNoSQLの知識も必要です。Neo4jなどのグラフデータベースも欠かせません。
データベースはサーバーにあり開発者の管理下にあります。Mongo風のRestDBやグーグル所有のFirebaseなどのリモートソリューションも存在します。
フロントエンド
フロントエンドはカオス状態です。
フロントエンド開発に求められる要件を理解するには、10年遅れたJavaScriptの知識をざっくり10分でアップデートしようを読んでください。要点を次に示します。
- Nodeとnpm
- Yarn
- TypeScript、ES6、Less、SCSS、Sassなど向けのプリプロセッサーとトランスパイラー(Babelなど)
- Gruntやgulpなどのビルドとタスク実行ツール
- Vue.jsやReact、Angularなどのフレームワーク
- webpack、Browserify、rollupなどのモジュールバンドルツール
デザイン
デザインは、アプリケーションのプロトタイプを作る知識と、プロトタイプをHTMLやCSSなどのフォーマットに変換する知識が必要です。プロトタイプができたら、JavaScriptでインタラクティブな応答を加えて、仮想JSエンドポイントでバックエンドをシミュレートします。シェルアプリが完成し、ユーザーエクスペリエンスデザインとインターフェイスデザインの準備が整うと、そこから開発に着手できるのです。これも立派な仕事です。次のツールを使います。
- PhotoshopとIllustratorか、GIMPやInkscapeなどのオープンソース製品。詳しくはこちら
- AtomやSublime Text(こちらはフルスタック開発者向けSTプラグイン10選)のような高速で使いやすいエディター
- Subtle patternsのようなパターン素材と、色の組み合わせを確認できるカラー素材
- CSS向けグリッドシステム
- 前述のフロンドエンドの項の中からJavaScriptモックに必要なすべて
- クライアントに見せてフィードバックをもらうために、プロトタイプをオンラインにデプロイする知識。おすすめツールはNgrok
ログ管理
エラーとアクセスログを追跡して重要な情報を抽出し、アプリの状態を効率的に監視します。トレンドに気がついてフラグを立てたり、システムダウンを防ぐためにCPUやI/O使用量の上昇を検知したりします。DevOpsにも関係しますが、特有のスキルが求められます。
ログ管理を学ぶには、ELKスタックに関するおすすめの記事があります。ログ検索にはElasticSearch、ログ収集にはLogstash、ダッシュボードに表示するKibanaを取り上げています。Logz.ioのようなホスト型のソリューションもあります。
モバイル
iOSとAndroidの両方でWebViewの性能が高まったことと、PWA(プログレッシブWebアプリ)の登場で、開発プロセスが複雑なネイティブアプリは人気が低下しています。フルスタック開発者はPWAをマスターするか、React Nativeを使うか、NativeScript、Tabris、Cordova、PhoneGapなどのWebView向けのツールを使って、「クライアントアプリ」がAPIに接続できるようにします(バックエンドの項を参照してください)。
フルスタック開発者になる価値があるか?
結局、フルスタック開発者の価値はあるのでしょうか?
上記を網羅するフルスタックな開発者はほとんどいません。大半を使いこなせても、すべてを使いこなす開発者はまれです。全方位をくまなくカバーするのは、不可能です。
広く浅く知っていても、マスターしたとは言えません。それでも知識の幅の広さは、プロジェクトに関わるテクノロジーを理解して、必要なものを見極められます。仕事の割り振りやチームの軌道修正に役立つだけでなく、独立にも頼りになるスキルです。
「JavaScriptの達人」「Elasticsearchの専門家」「MySQLのプロ」「DevOpsのマニア」「モバイルマスター」ではなくとも、フルスタック開発者なら力を発揮する場面はたくさんあります。さまざまなテクノロジーを試して、フリーランスとして代替案や奇抜なソリューションをクライアントに提案できれば、多様な収入源を得られます。多くのテクノロジーに通じているため、サーバー関連からWordPressプラグイン開発まで幅広い仕事を受託できます(私はWordPressよりはサーバー寄りですが)。
フルスタック開発者になる価値は十分にあります。私はFlashの仕事だけをしていた時期があり、仕事自体は楽しかったですが、プロジェクトが少なく、低収入でした。
※本記事は読者の評価が高かったため、2017年6月に最新の技術トレンドを反映して改稿しました。
(原文:Being a Full Stack Developer)
[翻訳:内藤 夏樹/編集:Livit]