インターン備忘録 ~その1~

tambourine(タンバリン)24Hインターン


 やることもなく、時間ができたので久しぶりのブログです。
 先日終わった初めてのインターンの内容でも忘れないようにまとめておこうかというきっかけで書き始めることにしました。
 内容は、インターンの紹介と業務内容、感想になります。

経緯


 大学に入学し、プログラミングに触れ初めて早1年。
 いろんな経験をさせてもらい、大学ってこんな感じなんだなと慣れてきたころ、予備校時代から通ってたバイト先から多めの休みをいただいたき、特にやることもなくなった1年の春休み。
 一念発起してインターンにいくことを決め、友人から教えてもらった長期インターン座談会という学生団体のイベントに参加し、企業さんと1対1でお話ししたり、メールを通じてインターンに参加することが決定しました。

いざインターン


 メールで日程を決めた後、オフィス見学&今後の予定決めに初めてのオフィスへ行きました。
 ちなみに、今回のインターン先の企業さんは『tambourine(タンバリン)』さん。JR御茶ノ水駅から徒歩数分の所にオフィスがありました。
ホームページはこちら

www.tam-bourine.co.jp

 オフィスはすごく綺麗でまるでおしゃれなレストランのようでした。それも相まって、とても緊張していたのを覚えています(笑)でも、社員さんはどなたも優しく接してくださったのですぐに緊張はほぐれていきました。

 今回のインターン24Hインターンというもので、勤務時間が合計24時間になるように予定を組み、その期間内に何か形になるものを作るというものでした。僕の場合、6時間×4日間のスケジュールでした。今思えば、初めてにはちょうどいい期間設定だったなと思います。

何したの?


 初オフィス見学の翌週からいよいよ出勤です。メンターの方から業務は「自分のやりたいことでいいよ」と言われたので驚愕…
 てっきり社内環境の改善のためのアプリ開発だと思っていた僕には嬉しい朗報でした(笑)
 そこで今回の業務は『twitterbotをherokuサーバにスケジューラを付けてデプロイする』ことを実現することにしました。簡単に言うと、『twitterbotを自動で1時間ごとにツイートする』ことです。
 デプロイとは、サーバーにシステムを利用可能な状態にして配置することです。

(twitterbotは年末にあらかじめ作っていたのでそこの話は割愛)

そのtwitterbotとやら twitter.com

ぎょーむ


 まず、herokuのアカウント作成!!!
 と思っていたのですが既に作成済みだったので終了。ホントQiita最強 (笑)
 で、次に自分の予め作っていたコードをサーバに渡し自動で実行してもらう訳ですが、今回の業務のポイントは、

1. TwitterAPIのkey(botを使うための個人情報の番号みたいなの)を隠さなければならない
2. そもそもmecabがデプロイできない
3. スケジューラを設定する

 特に2が難所。とても時間がかかったところです。
 残念ながら、メンターの方は一人しかおらず、インターン生も2~3人いたのでさすがにつきっきりで見てもらうこともできず、基本は一人で調べて、試しての繰り返しの作業でした。半分以上は調べる時間に費やしましたね(笑)

1. TwitterAPIのkeyを隠す


 今のままでは個人情報ダダ洩れなので、『.env』というテキストファイルを作ってそこを参照するようにコードを変えてあげます。

//.env

consumer_key='~~~~~~~'
consumer_secret='~~~~~~~'
access_token_key='~~~~~~~~'
access_token_secret='~~~~~~~~'
//setting.py

import os
from os.path import join, dirname

if not os.environ.get('APP'):
    from dotenv import load_dotenv
    load_dotenv(verbose=True)
    dotenv_path = join(dirname(__file__), '.env')
    load_dotenv(dotenv_path)

CONSUMER_KEY = os.environ.get("CONSUMER_KEY")
CONSUMER_SECRET = os.environ.get("CONSUMER_SECRET")
ACCESS_TOKEN_KEY = os.environ.get("ACCESS_TOKEN_KEY")
ACCESS_TOKEN_SECRET = os.environ.get("ACCESS_TOKEN_SECRET")

 if文はローカルとサーバーを分けるために作ったもので、深くは触れないです。
 これで、とりあえず各keyは『.env』の中に納めたのでそれをsetting.pyから参照して

//bot.py
import settings

api = twitter.Api(consumer_key=settings.CONSUMER_KEY,
                  consumer_secret=settings.CONSUMER_SECRET,
                  access_token_key=settings.ACCESS_TOKEN_KEY,
                  access_token_secret=settings.ACCESS_TOKEN_SECRET
                  )

 デプロイするコード(bot.py)からも参照できるようにしてあげることで、各keyを隠すことができます。
 しかし、これで全てのコードをデプロイしては意味がないので、デプロイしないコードを『.gitignore』というテキストフォルダにまとめます。

//.gitignore
*.csv
/all_recipes.csv
/all_recipes.txt
/connect.py
/crow.py
/lording.py
/naginagi.py
.idea
.env
__pycache__/

 今回は、ツイートするコード(bot.py)のみのデプロイなので他のコードも『.gitignore』にまとめます。
 これで、1の準備は万全です。
(今回のサーバーはherokuだったため、herokuの設定からkeyを設定する方法もありました。てか、そっちの方が簡単。)

2. そもそもmecabがサーバーに渡せない


 今回のtwitterbotは形態素解析に『mecab』を用いたものとなっており、毎ツイートごとに形態素解析を行い文章を生成するので、『mecab』をサーバーに渡せる必要があります。
 しかし、バージョンが変わってしまったせいかなぜか渡せなかったので、対策として『mecab』を使わない方法を模索しました。
 そこで『mecab』の代わりに『natto』に変えてみたもののあえなく惨敗。原因は『natto』も『mecab』依存のものであったためかと考えられます。
 さらに、代わりに『nagisa』を用いると「あら不思議!」解決しました。正直謎。わかる人いたら教えてください。

(仕様だと思われますが、『nagisa』は分かち書きの際の半角スペースっぽいのが残ってしまいます。『mecab』にはないんですがね...)

3. スケジューラを設定する


 ここはあまり書くことないです(笑)調べれば出てきます。
 ここの部分もそうですが、先にも述べたようにとにかく調べまくりました。的確な検索ワードじゃないと自分の知りたいことは出てきません。なので、なんて検索したらいいかわからないから的確な検索ワードにするために調べる、みたいなことの繰り返しで非常に時間がかかりました。
 でも、それを怠っては成長しない。色んな方から言われた助言でもあり、今回とても身に染みて感じたことでした。

感想


 そして、気づけば最終日。なんとか完成しました。自分の技量に自信がなかったのでやりたいこと、触ったことのある言語でやらせてもらえてよかったです。
 この24Hインターン、条件として何かしらのプロダクトを作成している必要があります。なので、プロダクトを作ってみたが、実際の現場に触れたいって人の一歩目にはとてもおすすめです。逆に、24時間だけなので何年も研究してますとか、たくさんのプロダクトを一人で作っていますっていう人が、厳しい社会を経験しておきたいというのには若干の物足りなさを感じてしまうかもしれないです。
 でも、紹介してもらった学生団体の方からも聞いていたようにとてもいい企業さんだったので、同企業さんが行っている『1dayインターン』だけでもぜひ参加してみてください。
 後日、その『1dayインターン』のことについてもブログに書くと思います。
 備忘録にもかかわらず読んでくださった方、拙い文章ですが、長らくお読みいただきありがとうございました。何かありましたら下記のtwitterでDMをくださると幸いです。


今回のインターン先の『tambourine(タンバリン)』さん

www.tam-bourine.co.jpwww.tam-bourine.co.jp

WANTEDLY

www.wantedly.com

3/26(木)にはオンライン説明会の開催を予定しているそうです。興味のある方は是非!!!!!!
オンライン説明会 | 人の役に立つ技術を追求したい新卒エンジニア大募集!

www.wantedly.com

今回の成果物

twitter.com

うp主

https://twitter.com/RandyGen0905