この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
※社内向けの自己アピール記事です笑。技術的な話は書きません、感想です。
インフラエンジニアになって丸一年が経ち、業務でプログラミング言語を覚える必要が出てきました。
"せっかくプログラミング学習するならWebアプリでも作ってみよう"と当時は安易に考え、インフラエンジニアが個人開発を始めた話です。
今回の記事は、インフラエンジニアが個人開発をやってみて思ったことや全体的な開発の流れを紹介します。
インフラエンジニアがなぜ個人開発?
わたしは2023年7月からPythonの勉強を始め、9月に人生で初めてWebアプリを作りました。
↓それがこちらです↓
https://noriori.tokyo/
なぜインフラエンジニアが個人開発を始めたのでしょうか。
わたしの現在地
わたしはインフラエンジニアとして、AWSクラウド領域を主に担当し、サーバ、ネットワーク、セキュリティの設計・構築・運用をしております。
プログラミング経験はほぼなく、オンライン学習ツール"Progate"でRubyとPHPの基礎演習を一通りやった程度しかありません。ですので、わたしはプログラミング言語に関しては、ほぼど素人ですね。
個人開発するキッカケ
プログラミング経験がほぼないわたしが、なぜ個人開発を始めたのでしょうか。キッカケは2つあります。
- 現場でプログラミングスキルが求められた
- 作りたいアプリケーションがあった
わたしのキッカケなので、さらっとだけ説明しますね。
1. 現場でプログラミングスキルが求められた
わたしが今参加している現場では、100以上のシステム、500以上のサーバが稼働してます。新しい技術を取り入れる風土があり、先日機械学習を利用したレコメンドサービスが導入されました。
そのレコメンドサービスはAWS Personalizeを利用していて、ソースコードはPythonで書かれています。
そして、まさかなのですが、プログラミング未経験のわたしがそのレコメンドサービスの運用を任されたのです。ちなみに、そのソースコードを書いた人はすでに現場にいません。
わたし以外レコメンドサービスを触れる人がいないので、結果的にわたしがソースコードの管理やリファクタリング、サービスのアプデに伴う改修をしなければいけなくなりました。
2. 作りたいアプリケーションがあった
2021年、2022年に保育園送迎バスの置き去り事件がありました。母が保育士なので、その事件が他人事とは思えず、ITでなにかできないかと考えていました。
考えた結果、園児の乗降管理ができるアプリを作ってみたいと思ったのです。
インフラエンジニアが個人開発するメリット3つ
インフラエンジニアが個人開発をしてみて、良かった点を3つ紹介します。
- 開発チームとのやりとりがスムーズになる
- プロジェクト全体がわかる
- コスト管理に厳しくなる
個人開発してよかったことがたくさんあるのですが、インフラエンジニアという本業にどう良い作用があったかに着目しました。
1. 開発チームとのやりとりがスムーズになる
各プロジェクトはおおまかに基盤であるインフラチームと開発であるアプリ・Devチームに分かれると思います。
毎週開発チームと打ち合わせをしますが、個人開発を経験すると開発チームの話がスムーズに頭に入ってきてコミュニケーションが楽になります。
2. プロジェクト全体がわかる
個人開発は初めから終わりまで、すべて一人で行います。
要件定義やWebデザイン、セキュリティ、サーバの契約、サービスリリース、広報など、やることすべてを挙げたらキリがないのですが、プロジェクトではすべて計画され、自分に見えないところでだれかが実際に各作業が行われています。
個人開発をすると、プロジェクトの全体像や知らなかったタスクを知ることができます。
3. コスト管理に厳しくなる
個人開発をする際に、地味にお金がかかります。
サーバレンタル料やドメイン代、参考書籍代、などなど。すべて自分の財布からお金が出ていくので、自然と削れるところを探し始めます。インフラエンジニアとして、コスト管理は最も重要なタスクの一つですよね。
前置きが長くなりましたが、個人開発の実際の流れを説明していきます。
インフラエンジニアが個人開発してみる
個人開発とは、
個人開発は趣味活動であるのでプライベートの時間を割いて開発することになります。 個人の時間というリソースは有限である一方で、個人開発において考えることは山ほどあります。「個人開発を始めてみよう──「失敗」を避ける大事な考え方とは?」より
個人開発をする際に、考えることがやまほどあります。この章では、わたしが実際に行った開発の流れと、開発する際に役立ったツール、個人開発する際の注意点を紹介します。
個人開発の流れ
一般的な個人開発がどういった流れなのかはわからないのですが、わたしは個人開発する際に、以下の流れで作ってみました。
要件定義
↓
基本設計
↓
コーディング
↓
テスト
↓
リリース
開発"V字モデル"の簡易版ですね。この流れの中でわたしが重要だと思った部分が2つあります。
要件定義と、基本設計です。
一つ目の要件定義です。実際にわたしが使った要件定義のフォーマットは以下ですね。
- タイトル:プロジェクト名やアプリ名などのタイトルを記載します。
- 概要:アプリの目的や機能、ターゲットユーザーなどの概要を説明します。
- 機能要件:アプリの具体的な機能や操作方法に関する要件を列挙します。例: ユーザー登録機能、ログイン機能、記事閲覧機能など
- ユーザーエクスペリエンス要件:ユーザーがアプリを利用する際の使いやすさや体験に関する要件を記述します。例: シンプルなUIデザイン、直感的な操作方法、高速な応答速度など
- セキュリティ要件:ユーザーデータやプライバシー保護に関するセキュリティ要件を記載します。例: SSL暗号化通信の利用、パスワードのハッシュ化など
- データ管理要件:アプリ内で管理するデータに関する要件を明示します。例: データのバックアップと復元、データの暗号化など
個人開発なので、ここまでガチガチに固めなくて大丈夫ですが、"機能要件"は絶対に考えましょう。
いわゆる"製品スコープ"と呼ばれるものです。
個人開発していると、途中でアレもコレもと機能を付けたしたくなってきます。機能を足し始めると、工数が増え、完成が遠のきます。
個人開発なんだから別にいいじゃんと思うかもしれませんが、本当にその機能必要ですか?とりあえず最初に考えた機能で世に出して、必要になったら付けたしませんか?
要件定義を作っておくと、考えや工数のブレが抑えられます。ぜひ作ってみてください。
つぎに基本設計です。使用した設計書フォーマットは以下です。
- アプリ構成図:アプリの構成や各機能の関係性を図示します。
- ユーザーフロー:ユーザーがアプリを利用する際の画面遷移や操作フローを示します。
- データモデル:アプリ内で使用するデータの構造や関係性を示します。例: ユーザーデータ、記事データなどの属性や関連性
- インターフェースフロー:各画面や機能の詳細な動作や振る舞いを示すインターフェースフローを作成します。例: ユーザー登録フロー、記事投稿フローなど
- データフロー:アプリ内でのデータの流れや処理方法を示します。例: データの受け渡し方法、データの保存場所など
- API設計:アプリが使用するAPIのエンドポイントやリクエスト・レスポンスの仕様を定義します。例: ユーザー登録API、記事取得APIなど
- セキュリティ設計:アプリのセキュリティ対策や認証・認可の仕組みを設計します。例: OAuth認証の導入、トークンベースの認証方式など
- データベース設計:アプリで使用するデータベースの設計やテーブル構造、関連性を定義します。例: ユーザーテーブル、記事テーブルなどのカラムや関連テーブル
- テスト計画:アプリのテストを実施するための計画やテスト項目を作成します。例: ユニットテスト、結合テスト、UIテストなどの項目とスケジュール
- リリース計画:アプリのリリースに関する計画や手順、展開環境などを定義します。例: ベータテストの実施、App StoreやGoogle Playへの申請手順など
基本設計のフォーマットで実際に役立ったのは、"ユーザーフロー"と"データベース設計"です。
個人開発を初めてやる場合、データモデルやインターフェースフロー、テスト計画なんてわかりません。ここで時間を費やすくらいなら、画面遷移をパパっと作って、コーディングし始めたほうがいいと思います。
しかし、"データベース設計"だけは考えておきましょう。
"データベース設計"は正直かなり曲者です。今回わたしが作成したWebアプリは、"データベース"との戦いと言っても過言ではないです。それくらいデータベースに苦戦します。
データベースの基礎を学んで、設計しておきましょう。ちなみに開発途中でもデータベースの設計は変えられます。わたしは何度も変更し、そのたびに関係するソースコードを何度も変更するはめになりました。データベース許すまじです。
個人開発の流れは以上です。
はじめての個人開発で役立つツール6選
わたしは人生で初めて、ひとりでWebアプリを作りました。当然ですが、なにも参考にせずに作り上げたわけではなく、多くのツールに助けられました。
わたしが個人開発をした際に役立ったツールを6つ紹介します。
- Udemy
- ChatGPT
- Github
- YouTube
- IDE(VisualStudioCode,Pycharm)
- IaC(Terraform,Ansible)
1. Udemy
あとでChatGPTの話をしますが、ChatGPTだけでWebアプリを作ることは可能です。
ただし、プログラミング言語の基礎があっての話ですね。
Python?SQL?Git?みたいなレベルでは、無理だと思います。まずは個人開発する際に使用するプログラミング言語の基礎学習をしましょう。
そして、基礎学習にもってこいなのが、Udemyです。
Udemyで自分が学習したい言語を検索し、評価が高く、かつ評価者数が多い講座を一つやりきりましょう。わたしは今回の開発でPythonを選択しましたので、次の講座の基礎演習を3周しました。
https://www.udemy.com/course/python-beginner/
2. ChatGPT
つぎは"ChatGPT"です。AIチャットサービスの中で最も有名ですよね。
わからない、困ったときは全部ChatGPTに聞きましょう。解決しない場合もありますが、問題となる部分がつかめるので、その時初めて検索しましょう。
また、ChatGPTはコードも書いてくれます。そのままコピペするのもいいのですが、学習の一貫として自分の手で打ちましょう。コードの流れがつかめるようになります。
3. Github
GitHubはソースコードをホスティングするサービスです。Gitを使用しているので、バージョン管理ができます。
レンタルサーバやクラウドにデプロイする際にgit cloneするだけでソースコードをサーバに持ってこれるので、大変助かります。
4. YouTube
つづいては動画配信サービス"YouTube"です。当然ですが、ChatGPTやGoogle検索でもわからないことがあります。
そんなときはYouTubeです。
意外とYouTubeに問題解決につながる動画がアップロードされていることがあるんですよね。調べるときは英語で調べましょう。海外の動画は問題解決に役立つお宝の山です。
5. IDE(VisualStudioCode,Pycharm)
みなさんにはお気に入りのテキストエディタがあるかと思いますので、慣れたものを使うのがいいですね。一応わたしが使っているIDEツールを紹介します。
-
Visual Studio Code
→サーバデプロイ・運用で使っています。 -
PyCharm
→ソースコードを書く際に使っています。Pythonに特化しているので、Pythonで開発する人はぜひ。
6. IaC(Terraform)
さいごはIaCツールの紹介です。個人開発はコードを書いて終わりではなく、サービスを世にリリースしたいですよね。
サービスを提供するためには、サーバが必要ですし、システムテストをする際に何度もデプロイするかと思います。AWSやGCP上にデプロイするとき、毎回マネコンでサーバを起動するのは手間です。
Terraformならたった一つのコマンド(terraform apply -auto-approve)で何度でもサーバを起動することができます。自動化できる部分は自動化して、コードに集中しましょう。
初めての個人開発における注意点3つ
はじめて個人開発をすると、おどろくほどたくさんの問題が出てきます。その中でも絶対に注意すべきポイント3つ紹介します。
- コスト
- セキュリティ
- スコープ
1. コスト
コスト管理は個人開発で地味に重要です。ローカルで開発しているときは、おそらくゼロ円ですよね。
しかし、テスト段階になって、AWSにサーバを立ててテストしてみたり、レンタルサーバの契約をしたりしはじめると、ちょこちょことお金がかかってきます。
とくにクラウドサービスを使うと従量課金なので、なにもしてなくでもお金がかかります。注意しましょう。
2. セキュリティ
個人開発で一番重要なのがセキュリティです。ユーザー情報を登録するサービスの場合、個人情報の保護やパスワードのハッシュ化、サーバへの不正ログイン、DDOS攻撃、セキュリティに関しては考えるべきことが多くあります。
とくにユーザーの情報と、サーバの保護はしっかりやっておきましょう。
3. スコープ
3つめはスコープです。要件定義の際に話しました、"製品スコープ"のことですね。
繰り返しになりますが、まずは最初に考えた機能での完成を目指しましょう。
ひとつ出来上がると、モチベーションが全然かわります。しかし、アレもコレもと機能を足して完成が遠のけば、結局なにもできずに途中でやめてしまうかもしれません。
最初に決めたスコープ内で、まずは一つ完成させましょう。
まとめ
インフラエンジニアのわたしは、個人開発をすることでたくさんの学びを得ました。
その中でも一番の学びは、"やればできる"です。
数カ月前までPythonについて全然しらなくて、関数やクラスなんてもってのほかでした。そんなわたしがPythonを使って、とりあえず動くものをリリースできたのです。
プログラミングや開発に興味がある方は、ぜひ始めてみましょう!やればできます!
↓ほかにも個人開発に役立つ記事を公開しています。ぜひ参考にしてみてください。
■【初学者向け】PCにPythonを学習するための環境を整える part1【Windows編】
https://cloud5.jp/saitou-python-install/
■【簡単】Pythonで始めるwebアプリ開発入門【Flask】
https://cloud5.jp/saitou-intro-flask/
■【初心者向け】Amazon EC2でRedisを使ってみる
https://cloud5.jp/saitou-redis-handson/
■【AWS】Terraformを使うための環境準備
https://cloud5.jp/saitou-terraform-start/
■【ubuntu】Let’s Encryptを使って無料でHTTPS通信を実現しよう【使い方】
https://cloud5.jp/saitou-letsencrypt-install/