CA Tech Dojoに参加して得られたもの
はじめに
3/6~3/12の1週間で、サイバーエージェントさんのAbema Towersに出社してAndroidアプリ開発を行いました。
開発の思い出と、得られたものなどを残したいと思ったので、初めてですが記事に残したいと思います。
CA Tech Dojoについて
開催日
2024/3/6(水)~2024/3/12(火)
人数
10名
当時のスキルレベル
アプリ開発自体は2023年8月に始めたので、経験は半年。
Androidアプリは始めて1ヶ月程度。
Flutterを使ってアプリは一つ完成させたが、基本的な文法や用語(インスタンス、インターフェイス、オブジェクトなど)をまだあまり理解していない(このことに道場期間で気づきました。)
要件
概要
AIとChatできるアプリを作る。
必須要件
- AIとチャットができる
- 新しい会話を始められる
- APIトークンを保存できる
任意要件
- 会話のタイトルを編集できる
- 会話履歴を保存できる
- ダークモード・ライトモードを切り替えられる
- 音声入力ができる
- etc...
1週間の流れ(アプリ開発の進捗も合わせて)
水
Abema Towersの大きさに驚く
キックオフ、自己紹介、要件の確認、1週間の目標立て
メッセージ画面の簡単な作成
カラオケでエグい支出(平日2時間で1人2500円..これが渋谷価格か..)
木
MaterialThreeの導入
build.gradleをlibs.versions.tomlに書き換える
ラウンジの使用を許可していただきました!緑が多くてきれい..
金
Retrofitに苦戦
CURLを叩くことは成功
公式ドキュメントの大切さを知る。記事を書くことの大切さを知る。
土
友達と限界開発
Retrofitを叩くことに成功!
日
同じく友達と限界開発
ChatGPTに過去のプロンプトも含めてメッセージを送ることに成功!
メッセージを新しく始める機能の実装
トークンを保存させることに成功(必須要件達成)
月
いよいよラストスパート
お昼ご飯は焼肉!
Roomを用いた会話保存機能に挑戦
MaterialThreeを用いてUIをきれいにする(真夜中)
火
最終日!発表、表彰、懇親会
Roomが惜しくも完成せず...悔しい
発表資料の作成すごく大変でした
最終日は一部のメンバーで銭湯に行きました!1週間の思い出や、これからの開発への意気込み、就活の予定などについて話し合いました。
1週間の振り返り
1週間アプリ開発をして思ったことや、メンターさんから頂いたFBなどをまとめます。
良かったこと
- 自分が理解したことは人に教えることでアウトプットした。
- エラーに対して社員さんがどのように対処していたか気をつけて見ていた。
- アプリの構成案を図にしていた。
改善すべきところ
質問の仕方
a. ここが分からないのでこうしてみた。と質問しても、コードを見るだけでどこが問題なのかわかってしまう部分がある(まだ基本的な文法がわかっていないからこの問題が生じたのだと思う。)
b. 15分経っても分からなかったら質問する。一つ深い階層にたどり着いたらそこからまた15分。
c. 分からないことを怖がらない。怒られてもその時悔しいだけで、今後一生知らずに開発を続けるよりはマシ。
d. エラーに対して行った対処法と、それでも解決しなかったことから、仮説を考えて送る。
1週間で学んだこと(開発について)
開発で学んだ知識(Retrofitの実装など)については、今後記事にしていきたいと思います。
開発への取り組み方
ChatGPTに頼りすぎていた。このことによる問題点は、いくつかあると考えられました。
- エラーの特定が困難になる。
例えば、Aという機能を実装するために、細かくabcdeの実装が必要だったとします。自力でコードを書く人は、aを書いてrunしてエラーがないことを確認し、bを書いてrunして...と繰り返します。エラーが出た時に、Aの実装の中でも具体的にbの部分でエラーが出たのか、dで出たのかが特定できます。
しかし、ChatGPTに聞いてコードをそのまま貼り付けた場合、Aの機能を実装するためのabcdeを一気に書くため、具体的にどの部分でエラーが出たのかがわかりません。それに加えて、abcdeで具体的に何を実装しているかわからないままコードを貼り付けることができるため、特定がより困難になると考えました。 - 情報源が明記されないため、情報の信用性に欠ける。
実務などでは、一行のコードによるエラーが、何十億円の損失につながる可能性があります。その際に、どのサイトを参考にしてコードを書いたのかなどの情報がとても大切になります。ChatGPTの場合、その情報が具体的にどのサイトから取得されたのか特定できないため、信ぴょう性の観点からも問題点があります。 - コードの意味がわからないまま書けてしまう。
出てきたコードスニペットをそのまま貼り付けるだけで実装できるため、そのコードの意味が具体的に分からなくても書くことができます。
しかし、この問題点に対して、ChatGPTを使わないという対処法を取るのではなく、ChatGPTを正しく有効活用しようと感じました。具体的には以下のようにします。
- 基本的な文法、用語を全て説明してもらう。
僕は情報学部ではなく、基礎の完璧なインプットなしにいきなりアプリ開発を始めたため、文法や用語の知識に穴があります。これらのインプットは、ChatGPTに聞けば、一つ一つ丁寧に教えてもらうことができます。
こうすることで、コード一行一行で何をしているのかを理解することができ、上で挙げた1,3の問題点を解決することができます。 - おおまかな把握のために使う。
エラーが出た時、エラー文を検索しても出てこない時があります。その時、スタックトレースの深い部分や過去の経験からどこに問題があるのかを特定している社員さんがいました。それは、今の僕の経験では特定できないような部分でした。このような部分は、ChatGPTに聞いておおまかな原因を予想してもらい、そのキーワードも含めて検索をかけることによりエラーの原因の特定につながると感じました。
エラーへの対処法
- まずはエラー文を読む(DeepLを使ってもいい)
- どこでエラーが出ているのかを特定し、(スタックトレースを見れば分かる)大体何が問題でエラーが出ているのかを特定する
a. ログのcaused byの部分に原因が書かれている可能性が高い。
b. エラーが出なかった時との差分を確認し、おおまかな原因となっているコードを把握する
c. debugPrintやブレイクポイントを利用する。 - エラー文をGoogle検索する、出てきた記事に従って確認する。
- ChatGPTにエラー文とコードを打ち込み、対処法を聞く。
- 先輩エンジニアに相談する。
1週間で学んだこと(友達について)
インターンが始まる前は、Androidアプリ開発を一緒にする友達ができるか不安で、2日くらい夜眠れませんでした..でも、インターンが始まってみると、みんな明るくて気さくに話しかけてくれて、あの不安が嘘のようでした。
驚いたことはたくさんあります。個人名は出しませんが、その中でも特に学んだことは、
- エンジニアでも朝早く起きて筋トレしてる人はいる。
- 開発だけでなく、事業もしている人がいる
- 自分の弱み、強みが全て言語化できている人がいる
- 知っていて当たり前のような質問をしても、一つ一つ丁寧に答えてくれて、自分のためにもなるからもっと聞いてねと言ってくれる人がいる
ということです。
開発は個人で家などで行うことが多いと思うので、内向的でおとなしい人が多いのかなと正直思っていました..もちろん集中タイムはありましたが、教え合う時間もあって、みんな丁寧に教えてあげていてとても素敵な雰囲気でした。開発が楽しく、どんな分野にも好奇心旺盛で、趣味を突き詰めている楽しさを感じました。自分の将来像・やりたいことについても深く考えて自己分析をしていて、とても尊敬できる友達ができました。
1週間で学んだこと(サイバーエージェント社員の生活について)
- 10:30出勤がとても魅力的でした。僕が朝に弱いということもありますが、満員電車を避けられるのは、QOLの観点からとても重要だと感じました。
- 社内にカフェが3つもありました。ローソンもありました。緑が多く、室内なのにとても開放感がありました。こんな素敵なオフィスでぜひ働いて見たいと感じました。仕事に対するモチベーションも高まるだろうなと感じました。就活に対するモチベは間違いなく高まりました。
- 最新のMacbookが貸与されることに衝撃を受けました。最先端のデバイスを用いて開発ができる環境が、最先端の開発をするという環境とマッチしていてとても良い環境だと感じました。
これからの予定、目標など
もともとインターン前から5月へ向けての目標を立てていたので、それを達成するために努力します。それに加えて、今回のインターンで学んだ技術的な内容を、記事にして公開したいと思います。
Discussion