開発経験を振り返る (〜2023年8月)
今後のためにも今一度、自分のこれまでの経験を振り返って、ここにまとめようと思います。
最近、インターンシップのエントリーや面接などで、自分の開発経験について書いたり話したりすることが多くなってきました。
今後のためにも今一度、自分のこれまでの経験を振り返って、ここにまとめようと思います。
一応、時系列順に並んでいて、最初は中学生のころの話から始まります...💦
おそらくこの記事を読んでいる多くの方は、興味がないと思うので、下の方までスクロールして読んでいただくことをお勧めします。笑
まだ、サイトのテンプレートをカスタムできてないので、目次を表示できない...
iOSアプリの開発をしたい
そもそも、僕がなぜこのように思うのかをまとめます。
"Appleが好き"
これは、iOSアプリの開発を始める最初のきっかけになった思いであると考えています。
中学生だったときに、Appleが作るプロダクトに魅了され、でも自分で買うことができなかった僕は、年に数回行われる新製品発表会を見ていました。
小さいころから英会話を習っており、それなりに喋っている英語は理解できました。
そんな中、毎年6月頃にWWDCと呼ばれるイベントが開催されていることに気がつきました。
そこでは、毎年アップデートされるiOSやmacOSの新機能が発表され、詳細な技術の説明は理解できていないものの、興味本位で見ていました。
同じ時期に、プログラミングを始めたのですが、その時は、Macを持っていませんでした。
当然、Xcodeに触れることもなく、家にあった貧弱なWindowsラップトップで、C言語、Python、JavaScriptなどを行ったり来たりしながら、好奇心のままに触っていました。
高校生になってからは、Appleのプラットフォーム上での開発にも興味を持ち始め (まだMacは持っていない) 、情報を収集するようになりました。
当時、どんなことをやっていたのかは、後のセクションに書いておきます。
大学生になって、M1 MacBook Airを入手、ついに、Xcodeがアンロック (?) されました。
そこから、少しずつ、iOSの開発にのめり込むようになりました。
毎年、iOS、macOS、watchOSなどの新機能がリリースされ、それを開発するXcodeの新機能、Swiftの新機能、APIの新機能などを追うのが楽しいという思いが、"iOSアプリの開発をしたい"と思う大きな原動力となっているように感じています。
高校生までの開発経験
大学生になる前までの開発経験を振り返ります。
中学生の僕が初めて触った言語
中学生だった頃、最初に触ったのは、C言語でした。
なぜC言語だったかというと、当時の僕が一番聞いたことがあった言語だったからですね。
僕が一番仲良くしていた友達 (後に僕をかんたっきーと名付けた人) が、同じ時期にC++の学習を始めました。
誤解を恐れずにいうと、2つの言語は、共通する部分が多くあるので、お互いに助け合いながら一緒に勉強した記憶があります。
ただ、当時の僕は、黒い画面に文字を出すことに飽きて、C言語の学習を途中でやめてしまいます。
作ったものが見てわかりやすい静的Web
次に触ったのが、HTML/CSS/JavaScript。
今までは、黒い画面に白い文字を出すだけで、親や他の友達にわかってもらえませんでしたが、Webだとブラウザで視覚的に自分のやったことが他の人にも伝わるのです。
父親が中古車販売業を営んでおり、その会社のホームページを1から作り直しました。
しかし、今度は静的なWeb開発に飽きます。
これはわかりやすい!Python
一旦、Webから離れ、Pythonという言語が最近流行っているという噂を聞きつけます。
Pythonは、C言語とは異なり、非常にわかりやすく、書きやすい言語だという印象を持った記憶があります。
そのおかげもあり、C言語よりも長続きしました。
より高度なWeb開発
Pythonには、Webのバックエンドを構築できるフレームワークがいくつかあります。有名なのは、DjangoやFlaskですかね。
今まで学んだ言語で、静的なWebサイトよりも高度なWebサイトを開発できるとなればやるしかないといいうことで、その学習を始めました。
高校生だった時には、クラスメイトと時間割を共有するWebアプリを制作しました。
動かす環境が必要
次に問題になるのが、Webサイトを作ったはいいが、世界に発信する環境がないことです。
父親の会社のホームページは、レンタルサーバー上で動いており、サーバサイドのプログラムはPHP・Python 2・Perlのみしか対応しておりませんでした。
時間割を共有するWebアプリは、PythonのWebフレームワークであるDjangoを使用していたので、Python3が使えることと、ライブラリのインストールができることが必須でした。
ないなら作ればよいということで、サーバ構築の勉強を始めます。
家に転がっていた古いWindowsラップトップにUbuntuを入れて、LANケーブルを差し、SSH接続し、Webサーバを構築し、作ったPythonのプログラムを引っ張ってきて、アクセスできるようになりました。
と簡単に言っておりますが、ここで色々な苦労がありました。が、同時にここでの学びは非常に多く、サーバサイド開発に限らず、幅広い基本的な知識が身につきました。
これで火事になっていたかと思うと...
JavaScriptでWebのバックエンド?!
JavaScriptは、ブラウザで動くもの。
そう思っていた中、Node.jsというプラットフォームがあり、それを使うと、JavaScriptでWebのバックエンドのプログラムを作ることができるということを知りました。
早速、React、Next.jsの勉強にとりかかりました。
当時は、フロントエンドのフレームワークとして、ReactかVueか論争が起こっていましたが、今となってはあの時にReactを選んでいて良かったなと思っています。
今、僕の父親が営む会社のホームページはNext.jsで構築されています。
大学生になってからの開発経験
1年生の頃は、Webの続き、SwiftUIの学習をしていました。
学内ハッカソン初出場で最優秀賞 (2022年12月)
2年生の時 (2022年12月) に出場した、学内ハッカソンで、最優秀賞と2つの企業賞をいただきました。
開発したiOSアプリのコンセプトは、"楽しみながら方向音痴を治せる道案内アプリ"。
UIは、SwiftUIで実装しました。アーキテクチャは、意図せず、MVVMっぽい感じになっていて、正しく責務の分離ができていません。
ガイドラインに違反した命名、数多く存在するフォースアンラップ、などなど...
今となっては大変見苦しいソースコードはこちら
現在、改善を続けております。現状については、後のセクションで詳しく記載しております。
ハッカソンで行ったこと
iOSアプリ開発を勉強し始めて、数ヶ月しか経過していないままこのハッカソンに参加しました。
また、チーム内にプログラムを書くのが僕のみだったこと、開発期間が1週間程度だったことから、アプリとしての完成度はかなり低く、コードの書き方含めて未熟な部分が非常に多いです。
しかし、これは、当時も感じていたことで、その後のモチベーションにつながったので、よかったと考えています。
ハッカソンの様子は以下の記事にまとめていますので、ぜひご覧ください!
CA Tech Dojo 2023 (2023年2月)
学内ハッカソンの2ヶ月後、CyberAgentのCA Tech Dojoという2週間のインターンシップに参加させていただきました。
ここでの学びは非常に多く、その後の開発に大きな影響をもたらしました。
インターン中に行ったこと
2週間を通して、エンジニアのメンターさんからアドバイスをいただきながら、1つのアプリを開発しました。
SwiftLintやSwiftGen、XcodeGenなどのツール、アーキテクチャ、Swiftらしいコードの書き方など、自分にとって全く新しいことを数多く学びました。
インターンの様子は、以下の記事にまとめていますので、ぜひご覧ください。
プロジェクト学習 (2023年4月〜)
現在通っている、公立はこだて未来大学には、3年次に"プロジェクト学習"と呼ばれる、チーム開発を実際に行う必修科目があります。
毎年、20プロジェクトほどが存在し、学生は担当教員との面談や希望調査をもとに、その中の1つのプロジェクトに配属されます。
配属されたプロジェクトによっても異なりますが、それぞれのプロジェクトは、いくつかのグループから構成され、それぞれのグループで異なるテーマで開発を行います。
経緯
まだ2年生であった2022年6月から、6人の学生と共に、チーム開発を始めました。
最初は、チーム開発をするということしか決まっておらず、なにを開発するのかは決まっていませんでした。
ブレインストーミングから始め、様々なプロセスを経て、バスロケーションアプリを開発することになりました。
開発を進める上で、バス会社との連携が必要になること、プロジェクト学習に割く時間が増えることなどから、3年生になるにあたり、このチーム開発を、プロジェクト学習のグループテーマとして持ち込めないだろうかという話になりました。
2023年3月頃から、開発を続けられそうなプロジェクトの担当教員と面接を重ね、この開発をプロジェクト学習として続けられることとなりました。
チーム体制の変更
もともと私を含めて7人のメンバーで活動をしておりましたが、当時のリーダーを含む2人が、プロジェクト学習での開発には参加しないこととなり、残りの5人で続けることになりました。
私は、リーダーを引き継ぎ、クライアントサイド (iOS)、サーバサイドを兼務することになりました。
チームマネジメントの難しさを日々実感しており、同時に開発を進めなければならないという状況の中、忙しい日々を送っています...
開発の現状については、後のセクションに詳しく記載いたします。
現在開発中の主なプロジェクト
現在、開発中のプロジェクトをまとめます。
Kantacky.com
このサイトです。
GhostというCMSを使用しています。
テーマは、現在開発中です。
使用技術
- Ghost
- MySQL
- Docker
- Nginx
- Let's Encrypt
- Amazon Simple Email Service
Misskey
僕のお友達でワイワイやってます。
使用技術
- Misskey
- Nginx
- Let's Encrypt
- Docker
- Redis
- PostgreSQL
- Google Compute Engine
- Google Cloud Storage
- Amazon Simple Email Service
- Cloudflare
STRAY-IT
先述した2022年12月の学内ハッカソンで作ったiOSアプリの改良版です。
コンセプトは、楽しみながら方向音痴を治せる道案内アプリです。
今年中のリリースを目指しています。
具体的に、マルチモジュール開発、アーキテクチャの採用、リファクタリング、新機能の実装を行なっています。
使用技術
- Swift
- SwiftUI
- MapKit for SwiftUI (iOS 17 の新機能の1つです)
- CoreLocation
- Swift Package Manager
- The Composable Architecutre (TCA)
- SwiftLint
- SwiftGen
ソースコード
BuLo
ひとめぼれするバスロケーションアプリの開発を行っています。
5人でチーム開発をしています。
チームの中では、人数の関係で、プロダクトオーナー、クライアントサイド、サーバサイドを兼務しております。
Flutterでのクロスプラットフォーム開発を行っていますが、iOSのネイティブ開発を経験したことによる知識が役に立っています。
使用技術
- Flutter
- Dart
- PostgreSQL
- Python
- GraphQL
- Go
- gRPC (使用予定)
- ProtoBuf (使用予定)
- Rust (使用予定)
- Docker
- Kubernetes (使用予定)
- Google Cloud Platform
Keiz!
これは、父親の会社のホームページとその情報を管理するシステム、iOSアプリです。
使用技術
- Next.js
- React
- Swift
- SwiftUI
- Swift Package Manager
- The Composable Architecutre (TCA)
- SwiftLint
- SwiftGen
- Auth0 (使用予定)
- PostgreSQL
- GraphQL (使用予定)
- Go (使用予定)
- gRPC (使用予定)
- ProtoBuf (使用予定)
- C++ (使用予定)
- Docker
- Google Cloud Platform
ソースコード
iOSアプリは公開の予定あり
あれ、本当にiOSアプリ作りたいの?
この記事を通して、いままで幅広くさまざまなことを経験してきたことがお分かりいただけたかと思います。
と同時に、本当にiOSアプリを作りたいの?と思ったかもしれません。
しかし、今、サーバサイドの開発など、他のことを行うのは、あくまで僕がiOSアプリの開発を行うためなのです。
開発を続ける原動力はいくつかあると思います。
自分の中で今最も大きな原動力は、こんなアプリが欲しいというアイディアや、こんなアプリがあったらあんなことができるという想像です。
実現するために、既存のシステムではどうしようもないことが多々あります。
ないなら作ればいいということで、あくまで、iOSアプリを作るために必要なステップとしてサーバサイドの開発も行っています。
本当は、サーバサイドを専門にしている友達がいれば良いのですが...
Comments ()