FLYWHEELのインターンシップに参加しました
2023年8月1日から8月18日の三週間、株式会社FLYWHEELのインターンシップに参加しました。修士卒業後の就職を踏まえ、M1の夏休みはインターンシップに参加して自分がどのような職業に向いているのか、どのようなことを社会人になってやっていきたいのかを考えようと考えていました。この記事ではFLYWHEELのインターンシップでやったことや自分の思ったことについて紹介したいと思います。
FLYWHEEELを知ったきっかけ
実を言うとFLYWHEELという会社名はインターンシップの中で初めて知り、それまでFLYWHEELという名前をCMや広告などで見たことはありませんでした。では、どこでFLYWEELという会社でインターンシップに参加させていただくことになったかというと、LabBaseというサイトでスカウトをいただきました。LabBaseというサイトは、自分の学歴や研究の内容、考えている職種を入力することで、会社からスカウトをいただくことができるようになります。自分はFLYWHEELからスカウトをいただき、承諾してから面接やコーディング試験を重ねて、今回のインターンシップに参加させていただきました。
インターンシップの詳細
インターンシップは東京の半蔵門にある本社に出勤するというオフラインで参加させていただきました。インターン中は下宿の京都から友人の東京の家に住まわせていただきました。自分の勤務時間は9:00から18:00まで(途中昼休み1時間)というスケジュールで、友人の家から半蔵門のオフィスまで電車で約一時間ほどかかりましたので、朝7時に起きて出勤するというかなり過酷な生活でした。ただ時給2000円という学生にとってはかなり高時給のインターンシップでしたので、それも楽しみにして三週間毎日朝早く起床して午後20時くらいに帰宅するという日程を過ごすことができました。
インターン中の業務
自分は三週間でNHKニュースサイト(速報・新着一覧|NHK NEWS WEB)から定期的に記事をスクレイピングし、それをAWSに保存するというプログラムを作成しました。スクレイピングとはWebサイトから情報を抽出して分析や加工を行うことによって新たな情報を生成する技術のことで、日々更新されるニュース記事を使いやすい形で保存しておくことで、将来的に活用できるようにするという目的でした。
タスクの具体的な内容
ニュースサイト(速報・新着一覧|NHK NEWS WEB)では記事の一覧画面が表示されていますが、この画面では直近に更新された20記事が表示され、一つの記事にはその記事のタイトルと更新日時が表示されています。さらに、このページから記事をクリックすることでページ遷移が発生し、その記事の詳細を確認することができます。そこでは記事の詳細画面とその記事のジャンル、タイトルなどを取得することができます。
使用した技術
- Python
- 今回のプログラムはすべてPythonで記述しました。
- Dagster
- データオーケストレーション(複数のストレージからサイロ化したデータを取り出し、組み合わせて整理し、分析に利用できるようにするための自動化されたプロセス)ツールの一つで、今回は作成したスクレイピングのプログラムを定期的に実行する必要がありましたので、このツールを利用しました。
- AWS S3
- JIRA
- FLYWHEELではメンバーのタスクを管理するためにJIRAを利用していました。自分もJIRAでタスクを把握していました。
- Github
- 今更ですが、バージョン管理ソフト。
実装した機能
ここでは実装した機能について紹介します。
- 定期実行
- ニュース一覧ページでは直近の20記事のみが表示され、古い記事は「もっと見る」ボタンを押さなければ閲覧することができなくなります。また、記事の更新頻度は時期によって変化し、例えば選挙や台風などの異常気象の場合は更新頻度が高くなります。今回は一時間に一回実行するという頻度に決定しました。
- AWSへの保存
- 実行時の日付のフォルダにparquetとしてデータを格納しました。
- 実行期間の指定
- 各記事には更新日時が表示されていますが、いつ以降の記事なのか、またいつ以前の記事なのかを指定することができる機能も実装しました。
実装する上で苦労した点
実装する中で苦労した点としては、ニュース記事のフォーマットが様々で、写真や動画が貼り付けられていると全ての文章を取得できないことがありました。NHKニュースのフォーマットは記事の記者によってさまざまで、文字べた書きの記事もあれば途中に箇条書きなどのまとめがある記事や記事途中に写真が挿入されている記事などもありました。例えば以下のようなものがその例です。
当初は記事のタイトルや文章を明確に区別して保存することを考えていましたが、このような変則的な記事がすべての記事の20%程度あり、情報の取りこぼしと重複のどちらが大きな問題であるかということを議論した結果、重複があってもかまわないので、情報の取りこぼしはないようにするという方針になり、最終的にタイトルや文章などを区別せずにすべて取得してしまうという方法で記事を保存することにしました。
インターンの中で発見したこと
- PRなどの作法
- スタートアップ企業という存在