LoginSignup
0
0

2DAYSワークショップ『PYTHON自動化プログラムコンテスト』 42Tokyo

Last updated at Posted at 2023-12-17

42Tokyoで実施されたPythonイベントに参加してきました。

2DAYSワークショップ『PYTHON自動化プログラムコンテスト』【株式会社ケアリッツ・テクノロジーズ × 42 TOKYO コラボイベント】

概要

このワークショップでは、4人組のチームで、Pythonを用いて「自動化したら便利」と考えられるものをプログラム開発してもらいます。

ケアリッツ・テクノロジーズの開発理念である「本当に役に立つシステムを造る」を、2日間の実践を通じて体感できるワークショップとなっています。

■ スケジュール
12月16日(土)・12月17日(日)10:00〜18:00
<1日目 12/16(土)>
10:00〜11:00 概要説明/サンプルの解説
11:00〜18:00 チーム開発1日目
<2日目 12/17(日)>
10:00〜16:00 チーム開発2日目/発表準備
16:10〜17:30 各チームの成果発表/投票タイム
17:30〜18:00 結果発表 *上位チーム表彰
18:00〜 懇親会(最大20:00まで)

チームメンバーの構成

名前 役割 Python歴
subaru 運命の人を探すプログラム 1週間
neko スクレイピング 1年
yuto スクレイピング 3ヶ月
fukui PythonGUI表示 未経験

アイデア出し

今回のテーマとしては「Pythonで自動化して役立つものを作る」であり、課題概要を含め考えた際に、実装方法よりアイデア勝負だと思った。そのため、他に類似しているものが無く、オリジナリティがあるものが望ましいと考えた。アイデア出しの中で、nekoさんが「フォローしている人のフォローしている人を検索できるシステム」というアイデアを出してくれ、色々話し合った結果、それを作ることにした。話が進んでいくにつれ、筆者も昔に似たようなことをInstagramでやってた事を思い出した。
それは、フォローしてる人のフォローしてる人のフォローしてる人達の中で新たな出会いを求めることだ。
図にすると次のイメージである。
image.png
このシステムを使う上で必要な情報↓

  1. ユーザーのアカウント名
  2. そのアカウント名のパスワード
  3. 共通の友人がいるアカウント名を2つ

これらの情報を入力することで運命の人の候補が出せるという訳だ。

image.png

Instagramの利用規約とプライバシー ポリシーには常に従う必要がある。スクレイピングはユーザーの権利を侵害したり法律に違反したりすることなく、倫理的かつ責任をもって行う必要がある。

作業

進め方としては、タスク管理はGithubの issue、共有したい情報はGithubの Wikiに記述した。オフライン開催だったので、みんなで集まりながら作業を進めた。

自動ログイン

実装する上で大変だったところは、Instagramに自動ログインすることができなかった事である。webスクレイピングする際によく使用される Selenium ライブラリの機能は使えなかった。理由としては、スクレイピング対策をされていたからだ。そこで、Microsoft社が提供しているplaywrightライブラリを使うことで問題解決できた。

フォロー一覧取得

InstagramのAPIで、アカウントがフォローしている人を取得する機能は無く、webスクレイピングしてフォロー一覧を取得する必要があった。しかし、web版では1回の読み込みで表示されるアカウント数は12人であり、スクロールしても新しいアカウント名が読み込まれず、情報を取得できなかった。これは手動でも同様の結果であった。
次の日、読み込みされない問題は開発者モードのモバイルエミュレータを使ったら、解決することがわかった。しかし、この状態でスクレイピングするのは通常のweb版との動作が若干異なっており、時間内に対応させることは出来なかった。

運命の相手を探すアルゴリズム

実装手順としては次の通りである。

  1. 自分がフォローしているアカウント名を格納するmy_listを作成。
  2. 引数で渡された2つのアカウント名(文字列)をエラーチェックする。
  3. 2つのアカウント名から名付けられたリストを作成。(a_list,b_list)
  4. 2次元Listx_listを作成。
  5. a_list && b_list && not my_list に含まれてるアカウント名をx_listの要素1に格納する。
  6. x_listの要素1がフォローしているアカウント名をx_listの要素2に格納する。
  7. x_listのインデックスサイズ分繰り返し処理を行い、x_listの要素2でnot a_list && not b_list && not myList を求める。
  8. リストy_listを作成し、求めたものをy_listに格納する。

image.png

実装の仕方
ChatGPTに実装手順を入力して、コードを書いてもらった。書いてもらったコードはnekoさんと一緒にコードの調整を行い機能を実装した。
筆者はpythonがほぼ未経験で2日間での実装だったため、今回はフルスクラッチで書くのは諦めた。

本来pythonの勉強をするという面では良くないが、プロダクトを完成させる方を優先したため仕方ない。

振り返り

良かった点

・ 自分達が自動化したい機能であったため、モチベーションが上がり開発していて楽しかった。
・ 懇親会の際にたくさんのメンターから、フィードバックを貰えて新たな課題が見つかった。
・ webスクレイピングについての理解が深まった。
・ Githubでタスク管理と情報共有がしっかり行えた。

悪かった点

・ pythonのGUIを動かせる環境がチームメンバー1人だけだった。
・ 開発者モードのモバイルエミュレータを移行する作業をギリギリまで行っていたので、早めに見切りをつけてマージ作業にうつるべきだった。
・ エラーチェックを怠っていたので、バグの原因を見つけずらかった。

今後

もしこのプロダクトを進めるのであれば、次のことをやっていきたい。

  1. プロダクトを一旦完成させる。
  2. ユーザーの好みやマッチング度などを測れる機能を作る。

最後に

時間内にプロダクトが完成しなくて、ほんとに悔しい。ちなみに、順位は8位でした。参加した感想としては、チームメンバーのレベル間が近かったため、みんなで楽しく作業できた。チームメンバーは普段喋ったことない人達だったが、これを機に仲良くなれたので良かった。
2日間という短い期間だったけど、またこういうイベントに参加したいですね。
このイベントを主催してくれたケアリッツ・テクノロジーズ様と42Tokyoには感謝です!ありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0