はじめに
この記事では、ニフティ株式会社で8/5~9にかけて実施された開発職向けインターンシップにおいて、5日間で学んだことや取り組んだことについてまとめました。
目次
-
インターン内容について
- 概要
- 担当した部分
- 使用した技術
-
参加した理由
- スクラム開発について学びたかったから
- 5日間で技術力伸ばしたかったから
-
得たもの
技術面
- Gitの理解
- メール送信機能
- DBマイグレーション・シーディング
内面- リーダーではないときの立ち回り方
- ビジネス視点
-
想定外の成果
- 事前準備してよかった
- メール通知機能の反響が良かった
-
もっとこうすればよかった
- 次はリーダーとして
- 詰まったときの対処
-
まとめ
インターン内容について
概要
1日目と2日目で経営課題に沿ったテーマについてチームで話し合い、課題を解決するためにどのようなサービスを開発すべきかを考えるアイデアソンに取り組みました。私たちのチームでは、プロバイダの一般的な認知度が低いことや、新規契約者にとってどのプロバイダと契約すべきか判断が難しいという課題に着目し、そのハードルを下げるためのアイデアを出しました。その結果、私たちは「ニフシミュレーション」という、ユーザーが自分に合ったプロバイダを簡単に見つけられるWebアプリケーションを開発することに決まりました。3日目から5日目の午前にかけては、実際のアプリケーション開発に取り組み、5日目の午後には企画部長やエンジニア社員に向けてプレゼンテーションを行いました。
開発内容
-
サービス名や月額料金などを表示する機能
「価格.com」を参考に、プロバイダのサービス名、月額料金、通信速度などの情報をデータベースに格納し、ユーザーがこれらを簡単に確認できるようにしました。
-
契約中の携帯キャリア、エリア、価格などの条件での並び替え機能
ユーザーが自分のニーズに合ったプロバイダを見つけられるよう、契約中の携帯キャリアやエリア、月額料金といった条件でプロバイダを並び替える機能を実装しました。この機能により、ユーザーはより精度の高い検索結果を得られるようになりました。
-
他社サービスとの比較機能およびニフティのサービスに絞った検索機能
ユーザーが他社のプロバイダと比較できる機能を実装し、複数の選択肢から適切なサービスを選べるようにしました。また、ニフティのサービスに絞って検索できる機能も提供し、ユーザーが信頼性のある情報に基づいて選択できるようにしました。
-
新規登録時に登録完了メールを自動送信する機能
新規登録が完了したユーザーには、登録完了メールが自動で送信されるようにしました。これにより、スムーズなユーザーコミュニケーションが実現し、登録後のプロセスが円滑に進行します。
-
ログイン機能の実装
ユーザーのニフティポイントと連携させるため、ログイン機能を実装しました。なお、ログインしていないユーザーでも料金比較ができるように、トップページで分岐させる仕様にしました。
-
ポイント獲得通知機能
ログインしたユーザーには、ナビゲーションバーに現在のポイント数を表示する機能を追加しました。また、新規登録時には「ご契約ありがとうございます!」というメッセージとともに、100ニフティポイントが付与される仕様にしました。
-
スクラム開発
初日のアイデアソンで出たアイデアを基に、実装の難易度や費用対効果を考慮して優先順位を決定し、開発を進めました。短期間で効率的にプロジェクトを進行させるため、スクラム開発手法を用いてタスク管理と進捗管理を行いました。
担当した部分
私は、上記の機能のうち「① サービス名や月額料金などを表示する機能」と「④新規登録時に登録完了メールを自動送信する機能」を主に担当し、さらに「② 契約中の携帯キャリアによる並び替え機能」と「⑥ ポイント獲得通知機能」の一部にも携わりました。
なお、ここでは概要のみ記載しますが、実装したときの詳細については以下の記事を参照してください。
1.サービス名,料金の表示機能では、バックエンドを担当し、データベースに新しいテーブルやカラムを作成するところから、空のテーブルにデータを挿入するシーディングまでを実装しました。シーディングの際には、Seeder
というPythonのライブラリを使用しました。このライブラリを使用することで作業が効率化され、他のチームやメンターから高評価を得ることができました。多くのチームは手動でデータを挿入していたため、私がライブラリを活用した点が評価されました。
4.メール通知機能では、flask-mail
とSMTPプロトコルを使用して、test.takutosan@gmail.com
という新規に作成したGoogleアカウントから新規ユーザー宛に自動的にメールが送信される仕組みを実装しました。最終的にメンターのサポートを受けて完成させましたが、事前に自分でバックエンドロジックを作成して臨んだことで、プロジェクトの進行がスムーズになり、メンターから「ここ数年のインターンシップで初めての事例」としてポジティブなフィードバックをいただきました。
また、2. 並び替え機能および6. ポイント獲得通知機能については、事前準備として、Flaskで簡単なREST APIを実装した際のソースコードをチームメイトに共有し、実装をサポートしました。具体的には、CRUD処理やDBセッションの確立をFlaskアプリケーションで行うためのコードを提供しました。これにより、GETやPOSTメソッドを使用した並び替え機能の実装がスムーズに進み、新規登録完了時に100ニフティポイントをデータベース上に保存し、ユーザーに通知する機能を実現する足掛かりとなりました。
使用した技術
- Python: サーバーサイドロジックとデータ処理
- JavaScript: ユーザー側の動的処理に使用
- Flask: webフレームワークとして使用
- Docker: 開発環境のコンテナ化
- Git: バージョン管理とチーム開発
Pythonライブラリ
- pymysql: mysqlデータベースとの連携
- flask-migrate: データベースのマイグレーション管理
- flask-sqlalchemy: ormによるデータベース操作
- flask-mail: メール送信機能の実装
- flask-login: ユーザー認証とセッション管理
- rye: パッケージ管理とプロジェクト環境の管理
- スクラム開発: アジャイル手法によるチーム開発
参加した理由
このインターンに参加しようと思った理由は以下の2点です。本題ではないため簡潔に書きます。
- スクラム開発について学びたかったから
- 5日間で技術力伸ばしたかったから
「スクラム開発について学びたかった」
まず、スクラム開発で進めるところに魅力がありました。スクラム開発という開発手法があることは知っていても、実際に何をしているかわからなかったためとても勉強になりました。
「5日間で技術力を伸ばしたかったから」
これについては、夏のインターンシップ全体に言えることですが、チーム開発に挑戦したり他のインターンシップ生と交流することで効率よく技術力が身につくと思います。実際に参加してみてGitについての理解が深まったり、自分より技術力のある人がどういう思考回路で進めているのかを間近で学ぶことができました。
得たもの
技術面
主に3つの技術および実装について学びました。
なお、これらについては別の記事にて説明しているので気になる方は読んでいただけると嬉しいです。
内面
インターンを通して技術面以外で学んだことは以下の2つです。
- リーダーではないときの立ち回り方
- ビジネス視点
これらはチーム開発の際にどう立ち回るべきかということだけでなく、社会人としても求められるスキルだと思います。
「リーダーではないときの立ち回り方」
これが最も大きな成長だと思います。インターンシップに参加すると、自分よりリーダーシップに優れたメンバーや技術力があるメンバーがいて、その時点では経験やスキルで勝てないことがよくあります。そんな時こそ、「今、自分に何が求められているのか」を考えて立ち回ることが重要かと思います。エンジニアとして仕事をするときも恐らく会社が自分に求めていること(やって欲しいこと)と、自分がやりたい仕事がマッチしないことがあるかと思います。ですが、チームで成果を出す場面では周りと協調し、その裏で自分のやりたい仕事をするために足りないスキルや経験を埋める努力をすることが大事なのではないかと思いました。
「ビジネス視点」
このインターンシップの特徴として、経営課題に沿ったプロダクトを考えるといった上流工程に重きを置いている点があります。実際に初日と2日目は資料をもとに会社の現状を分析するという時間がありました。私自身、商学部の学生なので多少はビジネス視点というところに強みがあり、アイデアソンでは積極的に意見を出しました。特に、資料だけではわからない背景的な部分について言及しました。例えば、テレビCMをしていないためプロバイダの認知度が低いことが背景にあるといった指摘や、ノジマが主に関東地区に展開していることから、関西のお客様はターゲットにしにくいことなど、マーケティングや経営者の視点から課題に対してアプローチしました。このように、文系出身だからできることを発揮できたことがもう1つの成果だと思います。
想定外の成果
インターン期間中に思わぬ成果を生んだ出来事は以下の2つです。
- 事前準備してよかった
- メール通知機能の反響が良かった
「事前準備してよかった」
これは先程も紹介したように、インターンの事前準備としてFlaskで簡単なREST APIを実装したこと、また、インターン期間中にメール通知機能を実装すると決まってから、事前にflask-mailとGmailで簡単なメール通知機能を実装したことの2点が挙げられます。
「メール通知機能の反響が良かった」
メール通知機能を最終日ギリギリに実装できたのですが、ニフティ社員の方や幹部社員の方、他チームの人からの反響が大きかったです。特に、メンター社員の方から「メール通知機能を実装したのはここ数年のインターンシップで初めて」と言われ嬉しかったです。また、最終日のプレゼンでも、幹部社員の方から「メール通知がきてポイントが付与されるのは面白いね」という評価をいただけました。もちろんメンター社員の方のフォローなしでは完成し得ませんでしたが、これまでやったことの無い実装にチャレンジする楽しさを感じることができました。
もっとこうすればよかった
より充実したイベントにするためには以下の2つが必要だと思いました。
- 次はリーダーとして
- 詰まったときの対処
「次はリーダーとして」
今回はリーダーに立候補することができなかったので、次はリーダーとしてチームに貢献出来ればと思います。インターンシップではたいてい技術力のあるメンバーがリーダーを務めることが多いですが、全体の進行など技術力が関係ないようなポジションであれば自分にもできるのでもっと積極的に手を挙げられたらと思います。
「詰まったときの対処」
これは4日目の出来事ですが、朝VScodeを開いてさあ開発を始めようというときに、VScodeが開けないということが起きました。さらに悪いことは続くもので、VScodeをアンインストールして始めたあと、今度はDockerが立ち上がらないということが起き、メンバーと進行にだいぶ差が生まれてしまいました。焦るとともにイライラしましたが(笑)、自分で解決できなそうなら早めにメンター社員を頼るべきだったと思います(調べるより聞く方が早い)。また、その際も、「ここまではわかったけどここからがわからない」と伝えることができれば、相手も理解しやすくなるかなと思います。
まとめ
ニフティさんのインターンシップでは非常に多くのことを学ぶとともに、オフラインということもあってチームメンバーと仲が深まって色々な話を聞けたのでよかったです。27卒以降の方には是非おすすめしたいインターンシップですので、来年度も開催されるのであれば応募してみてはいかがでしょうか。