フルスタックエンジニアは、どのような1日を送っているのでしょうか?
システム開発の6つの作業工程である、「要件定義」「設計」「開発」「テスト」「稼働(リリース)」「運用」をすべて1人でこなさなければならないフルスタックエンジニア。
通常、サービス開発をする際には、サーバーエンジニアやデータベースエンジニア、システムエンジニア、ネットワークエンジニアなどの専門技術者と分担して作業するのですが、スピードを重視する開発現場は、連携や引き継ぎがないフルスタックエンジニアを必要としています。めまぐるしく変化するIT業界では、開発スピードの速さは重要ですので、1人でサービス開発ができるフルスタックエンジニアを求めている会社が多いのです。
しかし、需要があるということは、希少価値があるということ。当然フルスタックエンジニアを目指すには、専門分野のスキルを2つ以上獲得するために、最新技術の勉強や幅広いITの知識が必須になります。ここで苦労して挫折をする方が多く、そのまま辞めてしまうのです。
ただし、努力は決して無駄にはなりません。苦労を乗り越えたその暁には、あなたの技術における需要は高まっており、収入アップは確実といえます。2030年には約80万人のIT技術者が不足するといわれているので、今から挑戦してみる価値は十分にあるでしょう。
今回は、「フルスタックエンジニア」という働き方を知りたい、あわよくば挑戦してみたいという方へ、フルスタックエンジニアの1日を通して、仕事内容や開発の流れをご紹介します。
前提として
筆者は現在、マッチングアプリの開発プロジェクトに参画しています。メンバーは3名で、アジャイル型で開発を進めています。現状は実装前の準備段階に入っており、作業は概ね順調です。
サービス開発の仕方に大きく2つあります。アジャイル型開発とウォーターフォール型開発です。
アジャイル型開発とは、「実装」→「テスト実行」を繰り返し、徐々に開発をしていくスタイルです。仕様や設計に変更があることを前提に進めていくため、不具合が起きた時や追加機能を実装したい時に、柔軟に対応できます。
アジャイルを直訳すると「素早い」という意味の通り、リリースまでのスピード感を重視したいときはアジャイル型で開発をします。このスタイルで行う1番の魅力は、開発の最中にユーザーに使用してもらいつつ、直接、意見を聞けるということです。良い・悪いの反応や、使いづらさなどを伝えてもらうことで、最終的に満足度の高いアプリやシステムが完成します。しかし、スピード感を出すのと引き換えに、精密な仕様を決めないまま実装するので、開発の軸がブレてしまうというデメリットもあります。
「テスト実行」の際にうまくいかない部分の仕様を変更・追加で改善していくので、いつの間にか最初に決めていたゴールから遠ざかってしまうのです。また、スケジュールや現状の進捗が把握しづらく、納期までに間に合わなくなってしまうこともあります。注意点としては、数名規模のチームごとに開発をするので、各チームで細かく連絡を取り合うことです。アジャイル型開発は、メンバー1人ひとりが「全体の進捗状況を把握する」「目的に合わせた開発をする」ことを意識することで、スピードも完成度も高い開発をすることができます。
ちなみに、一方でウォーターフォール型は、「企画」→「要求分析」→「設計」→「開発」→「テスト」と1つずつの工程を完了してから、次の工程へ進む開発方式で、前の工程には戻らないという特徴があります。スケジュール設定や進捗度の把握がしやすく、納期までにしっかりとつくり込めるのが良いところです。しかし、顧客のニーズが多様化している不確実性の高い現代では、世に出してからが本当の勝負になります。
完璧だと思える設計で開発をしたとしても、顧客が実際に手に取るまで成功するかはわかりません。また、競合他社も同じジャンルのアプリを企画している場合、綿密に計画をたててから実装するようでは、大きく遅れをとってしまいます。そのため、ウォーターフォール開発に向いているのは、数十年稼働して古くなってしまったシステムなどを新しくしたり、同じ機能をもつ別のものに置き換える場合です。明確に作るものが決まっていますので、1段階ずつ確実に進めていく方が効率的といえます。
私は、規模が小さめのベンチャー会社にてフルスタックエンジニアをしていますので、スピード感を重視したアジャイル型開発のプロジェクトに携わることが多いです。細かくPDCAを回して「実装」→「テスト実行」を繰り返すため、優れた技術に加えて、仕様変更への対応力など求められているスキルは様々。
一方で、友人の働くいわゆる大企業では、システムエンジニアやフロントエンジニアなど、それぞれの専門性をより重視した開発を行っています。得意分野を活かして働いているので、高度で大規模なシステムをつくることが可能です。また、仕様書通りにプログラムを書く下流工程の人は、要件定義や設計をする上流工程から学ぶ機会も多いので、スキルアップをしたい人によい環境だといえます。
ベンチャー企業や大企業にはそれぞれメリットがありますので、自分に向いている方を選ぶとよいでしょう。役割分担がないフルスタックエンジニアは大変ではありますが、プロジェクトをこなしていくごとに自分の技術が向上している達成感もあり、楽しみながらエンジニアの仕事をしています。
それでは、フルスタックエンジニアの1日をみていきましょう。
フルスタックエンジニアの朝
出勤時間は9時30分からと遅めなので、朝8時に起床します。エンジニアは頭を使うので、朝ごはんは必ず食べます。会社までは電車で約30分ほど。自宅を9時頃に出て、電車内ではスマホでニュースを見ます。開発したサービスをたくさんの人に使ってもらいたいので、世の中の流れや最新技術、ビジネスの情報収集は怠りません。また、息抜きにゲームアプリで遊ぶこともあります。
さて、電車を降りて、会社近くのコンビニでブラックコーヒーを買いましょう。私の周りにいるエンジニアの方は、コーヒーを好む人が多いです。自然と影響を受けて、朝の習慣として飲むようになりました。
出勤 9:30
会社に到着です。デスクについたらまずはパソコンを開いて、チャットの確認を行います。お客様と開発メンバーの連絡は主に、Slackやchatwork、Backlogなどのビジネスチャットツールを使用している場合が多いです。メールを使う場面はほとんどありません。
本日は、chatworkにて私宛にメンションが飛ばされているメッセージがありましたので、まずはそちらの返信を行います。メッセージがない日は、チャットの履歴を見て現在の進捗を確認したり、スムーズに開発が進むようにタスクの整理を行います。また、開発メンバーとソースコードを共有するアジャイル型開発は、ソースコードのバージョン管理も必要です。「Git」「Mercurial」「Subversion」などバージョン管理のシステムを見ることで、全体の進み具合がわかります。
そうこうしている間に、朝会の時間がきました。
朝会 9:45
朝会ではPMやディレクター、業務委託の方と10分程度のミーティングをします。進捗やその日行う業務、課題の共有が目的です。新たな課題が存在する場合は、その都度会議を開いて話し合いをします。
朝会では、お互いの認識を一致させることで、安心して作業を任せてもらうことができます。フルスタックエンジニアの仕事は1人でパソコンに向かう作業も多いため、「どこまで進んでいるのか」「今日1日でどれくらい進められるのか」など報告・連絡・相談を大切にすることで、お客様から信頼を得ることに繋がります。
また、チームメンバーとコミュニケーションを取るのもこの時間です。お互いの状況を把握したり、リラックスして雑談をすることで、チームの一体感を育みます。
企画会議
本日は、担当プロジェクトの最終企画会議です。無事、要件が決まりましたので、今後はいよいよフロントエンドとバックエンドの実装が始まります。
要件定義というのは、お客様が希望しているシステムの内容をヒアリングして、それを実現するために「どのようなシステム機能が必要か」を決定する段階です。お客様がシステム化したいビジネスモデルをしっかりと理解し、実現するために必要なものを提案しますので、コミュニケーション能力も大事になります。
その点、フルスタックエンジニアは要件定義から運用までを1人でできるので、サービス全体の流れを掴んで提案するのは得意です。今回担当するマッチングアプリに関しても、お客様から良いお返事をいただけたので、次は実装に向けて動き出します。
フロントエンド開発
それでは、企画会議後から昼休憩まで時間があるので、フロントエンド開発の段階にはいりましょう。仕事の内容は、要件定義を元に書き出した設計書を確認しながら、実装を進めていく作業です。
実装時は、誰が見ても理解できるよう、見やすいコードを書くことを意識しています。違う人が修正する場合のことを考え、コードを整理したり工夫することは大事です。ただ、頭を使う作業になりますので、行き詰まったときは独り言をつぶやくこともあります。声に出すことにより頭の中が整理できるため、意外におすすめです。また、イラストを描きながら、全体の流れを掴む方も多いです。各エンジニアには、仕事を有意義に進めるための独自のライフハックがあるので、身近な先輩に聞いてみてもいいでしょう。
フロントエンド開発については、コーディングもできるフリーランスデザイナーの方にも協力してもらっています。作業の進み具合がスムーズになるので、心強いです。午前中には一度形ができるとのことで、午後の進捗共有で確認をします。
ちなみにフロントエンド開発とは、ユーザーの方が直接触れる部分を開発することです。ECショップでお買い物をしたり、SNSで友達と交流する画面はフロントエンジニアが作成しています。Web系サービスでは、HTMLやCSS、Javascriptのスキルが必要です。自分が書いたコードがネットの画面上で動くのが楽しく、実装しているときは時間を忘れて集中してしまいます。
いつの間にか昼休憩の時間になりましたので、外へ食べに行きましょう。
昼休憩
お昼休憩は人によって過ごし方は様々です。私のように毎日外食の人もいれば、持参したお弁当を食べる人、オフィスにきている宅配弁当を購入する人、コンビニで適当に済ませる人などがいます。あとは、エンジニアは熱中する性格の人が多く、夜更かしをしてまで趣味を楽しみます。そういう方は、さっとご飯を済ませてからお昼寝をしているのをよく見かけます。技術力のある優れたエンジニアと一緒に長く働きたいと思っている会社では、職場環境への投資を積極的におこなっているため、社内でも心地よく過ごせるのです。たとえば、コーヒーサーバーや、気持ちよく仕事ができるデスクやチェア、お菓子を気軽に食べられるオフィスグリコ、疲れたときに重宝したい休憩エリアなどが充実しています。仲間との会話の中から仕事のアイディアが浮かぶなど、職場環境が良いと仕事も捗るので、会社を選ぶときに大事したいポイントです。
また、エンジニアのオフィスの場所は都心に集中している傾向があり、周辺にはお洒落なカフェや飲食店で溢れています。社内で過ごすのもいいですが、個人的には、テラス席で太陽の光を浴びながら食事をすることも、最高の気分転換になります。
オフィスに戻ってからは、食後のデザートにオフィスグリコで購入したチョコを食べて、ブラックコーヒーを飲み、午後の仕事に備えます。
バックエンド開発
それでは、仕事を再開しましょう。午前ではフロントエンド開発にて、マッチングアプリの見た目を綺麗かつ使いやすいデザインにしました。午後からは、マッチングアプリとしてしっかりと動作するよう開発を進めていきます。
まず行うことは、システム構成や開発時の操作について決定することです。vueとamplifyを使用したプロジェクト作成をし、実装前の準備を進めていきます。構成や操作を決定しておくことで、実装に入った時にスムーズに作業できるからです。フルスタックエンジニアはコードを書くこと以外にも、やることがたくさんあるのでかなり頭を使います。慣れるまでは大変かもしれませんが、日々こなしていくうちに力がついてきて、できることが増えていくので楽しいです。
ちなみにバックエンド開発とは、サーバーサイドやデータベースのシステムの「要件定義」「設計」「開発業務」を行うことです。使われている言語は主に、Java、C#、PHP、Ruby、Pythonなどがあります。興味がある方は、書籍やオンラインの学習サイトで触れておくといいでしょう。
バックエンド開発は、ユーザーの目に見えない裏側のシステムを構築する作業なので、うまく作り込めないと「クリックしても反応がない」「動作が重くて使いづらい」などの失敗に繋がってしまいます。リピーターの方が増えるように、アプリの使いやすさを意識するなど、ユーザー目線で開発することが大事です。
とはいえ、切り詰めて作業をしていても、集中力が切れてきてしまいます。そういう時は、エナジードリンクを飲んだり、スマホを触ったりして、適当に一息つきましょう。この仕事は、何時から何分間休憩するといった規定はないので、気分転換をしたいときにふらっと休めるのがよいところです。エンジニアは結果がすべてなので、納期までに制作物を納品するために、休憩して集中力を取り戻すのも仕事の内にはいります。
ちなみに私のおすすめの休憩方法は、ノイズキャンセリングイヤホンで音楽を聴くことです。開発が調子に乗っている時はアップテンポで、本当に疲れをとりたいときにはゆったりとした音楽を聴いてストレス解消をします。スマホの中にお気に入りの曲をリストで保存しているので、気分にあわせて流しています。
お昼寝休憩
お昼にブラックコーヒーを飲んだものの、どうしても眠くなってしまいました。基本的に1日パソコンの画面をみているので、目も疲れてきたようです。このまま気合いで作業しても良いですが、少し休んだほうが効率よく仕事できそうな場合は、お昼寝をしています。利用するのは、オフィスにある完全個室の仮眠スペースです。この時間はお腹が満たされていて眠くなりやすいので、他のエンジニアの方も数名寝ていました。私はいつも20分ほど寝ることで、頭がスッキリします。それでは、作業を再開していきましょう。
進捗共有
業務委託のデザイナーの方と進捗共有をします。概ねOKなので、細かな修正は自分で行うことにして、本格的にバックエンド開発を進めます。実装タイムに入るので、集中して作業していきます。
集中タイムに入るときは、ガムを噛むのが私の習慣です。周りのエンジニアにも軽食をとることをきっかけにして、一気に取り組む人が多いかもしれません。それぞれ大好きなお菓子や飲み物があるので、自分で気分を上げられるよう工夫しています。個人で作業することが多いため、自ら集中タイムに入る前のきっかけづくりは大事です。いつの間にかルーティンとして体に染みついています。
退社 19:00
フロントエンド開発の細やかな修正と、本日の作業報告を終え、珍しく定時で退社できました。同じ駅で勤務している友達を誘い、飲みにいこうと思います。システム障害などのトラブルが起きた場合は残業になる場合が多く、定時帰りは貴重です。お客様のためにも自分のためにもトラブルが起きないように、日々の開発でしっかりと作り込んでいきたいですね。
帰宅 22:00
飲み会が終わり帰宅です。このまま寝ても良いですが、フルスタックエンジニアに限らずですが、エンジニアは毎日が学習です。今日は、最近買ったビジネス書と最新の技術書を電子書籍で読み進めます。エンジニアは労働時間で価値提供しているわけではないので、結果を出すためにもビジネスと技術の勉強は大事です。最初はめんどくさいという気持ちもありましたが、勉強することで仕事でも成果につながっているので、だんだんおもしろくなってきました。
就寝 25:00
作業をしているうちに楽しくなってきてしまい、まだ続けたいですが、今日は水曜日で明日も朝が早いので、そろそろ寝ることにします。私の習慣の1つである読書タイムは、眠りにつく前に行うことで、知識が定着しやすいのでおすすめです。エンジニアになってから職業病なのかわかりませんが、日常生活でも効率を意識するようになりました。それでは、明日もプロジェクトが確実に進むようがんばりたいと思います。
まとめ
1日仕事をする中で、フロントエンド開発やバックエンド開発をしている通り、フルスタックエンジニアはなんでもできるエンジニアです。案件全体の業務を見渡すことのできるポジションで、業務の幅も広いため、エンジニアとしてキャリアを積みたい方に向いています。1つのプロジェクトを企画から公開まで一気通貫で進めるので、やりがいも大きいです。
また、フルスタックエンジニアは特にベンチャー系の企業に求められる傾向が強く、サービス開発を一から経験してみたいという方にはとても良い職業です。
その分激務でしんどいという評判も多くありますが、昨今のエンジニア不足を考えれば、間違いなくニーズのあるお仕事ではあります。ぜひ、選択肢の1つとして考えてみてはいかがでしょうか。
【関連記事】
これなら分かるITエンジニアの業界・種類〜RPGにたとえるなら〜
IT業界を目指すなら就活エージェントと話そう【エントリーは1分】
「エンジニア就活」には、IT業界・SEに強い就活エージェントが揃っています。話を聞いてもらうだけで、自分が何をやりたいのか、就活するうえでの軸や業界について見えてきます。さらに、あなたに合った未公開求人も紹介してもらえるので、まずは気軽に相談してみましょう。会員登録や相談・セミナーなど、すべて無料で利用できます。