サイバーエージェントのエンジニアインターン、「学生版ヒダッカソン」に行ってきた
学生版ヒダッカソン -API編-というサイバーエージェントの1日インターンに参加してきました。 せっかくなので、振り返ろうと思います。
リンク切れした時のために詳細を下記に載せておきます。
「ヒダッカソン」とは、エンジニア達が技術を競い合うサイバーエージェントの社内イベントです。 前回好評だった「ヒダッカソン」のサーバーサイド編の内容をアップデートして開催いたします。 今回のAPI編はサービスを模したWebアプリケーションのAPIを実装してスコアを競います。 メンターとなるエンジニア社員のバックアップのなか、学生同士で点数を競い合っていただきます。 1日で開発スキルアップを図り、現役のエンジニア社員、技術、開発環境に触れることができます。
参加までの流れ
書類選考
自分が今まで作ってきたものやインターンでどのような業務を行なってきたのかなどについてWEB上で回答して、それに対する選考がありました。
面接
書類選考を通過すると、面接の日程を決めるためのメールがくるので、それに回答しました。
面接自体は、書類選考で自分が書いたことについて聞かれるという一般的な内容でした。
思っていたよりも深く掘り下げた質問が無かったように感じたので、インターンに行きたいという気持ちがあればいけると思います。
交通費や宿泊費など
インターンがあった場所は、サポーターズ渋谷でした。交通費は全額支給され、宿泊する場所に関しては、道玄坂にあるアパホテルを二泊三日で手配していただきました。(二泊三日というのは、インターン前日の一泊とインターン当日の夜の一泊を合わせて二泊という意味です。)
内容
グループ分けなど
このインターンは上記にもある通りにハッカソン形式です。
使用する言語別に1グループ5人程度に分けられて、グループごとにメンターがつくという感じでした。
全体としては、35人ほどでした。
実際何をしたのか?
一人ひとりにサーバーが用意されていて、そのサーバー上にAPIを実装するという内容でした。
言語は、Ruby・Go・Pythonなど有名どころはだいたい開発環境が整えられおり、他の言語についても自分で環境構築さえできれば、使ってもいいよという感じでした!
また、ディスプレイが用意されていたので開発が捗りました。
難易度
僕にとっては非常に難しかったです。様々な知識が足りていないように感じました。しかし、その分、他の学生の方やメンターの方に質問をしたりして、少しずつAPIが形になっていく様には非常にやりがいがありました。
スコアなどの評価基準
仕様書に記載されている機能を一つ実装し、その後動作確認をリクエストすると自動的に確認が行われて、うまくできていれば点がもらえるという感じでした。
具体的に機能というのは、ユーザーのログイン機能などです。次回、開催される時はまた違った内容になると思われるますが、全てのPOSTリクエスト・GETリクエストを実装していく感じです。
自分の実装方法
いざAPIを実装しようとして最初は、慣れ親しんでいたRailsを使う前提で環境構築などを行なっていたのですが、どうもRailsでの実装には非常に時間がかかりそうだという事が分かったので(聞いたところでは、Railsで実装できた人はいなかったそうです。)、途中でSinatraでの実装に切り替えました。
ここで初めてSinatraを使うことになったのですが、思った以上に扱いやすくSinatraに助けられました。純粋にSinatraすげーって思いました。
結果
前半でRailsの環境構築に時間を使い過ぎてしまったためにSinatraでの実装に充てられる時間が非常に少なくなってしまい、その結果、全く点数を獲得することができませんでした。
ですが、とても楽しく、技術的に濃い時間になりました。また、自分の足りないものが明確になったり、新しい技術に触れる場になったので参加してよかったと思います!
振り返り
Railsを使ってWEBサービスを作っていると、どうしても上部だけ触る事が多いので、より深い知識が必要な時に太刀打ちできません。これからは、Rails全体を理解することを意識して開発を行なっていこうと思いました。(自分でgem作ってみるとか)
また、せっかくSinatraを使うことになったので、Sinatraで何か作ってみようと思います。
Sinatraで作れるもので面白そうなもの募集中です!
以前リリースしたサービスLinch(リンク)でAPI以外でSinatraで何が作れるのかについて質問しています。もしよければ回答していただけたら嬉しいです。
Herokuで公開しているサービスに独自ドメインをサブドメインなしで設定する(ムームードメインの場合)
railsで作成したアプリケーションをHerokuを使って公開する時に、ムームードメインで取得したドメインをサブドメインなしで設定しようとしたのですが、ムームードメインを使ってやっている記事が見つからなかったので簡単にまとめておきます。
Heroku側の設定
⑴まず、Herokuのダッシュボードからドメインを設定したいアプリケーションのSettings画面に行く。
⑵ Settings画面で少しスクロールすると、Domains and certificatesみたいな欄があるので、 そこでAdd Domainをクリックして、出てきたフォームに自分が設定したいドメインを入力する。
(例)example.comみたいにhttps://無しで記述する。
⑶ そうしたらsave changesする。
⑷すると下の方の Domain Nameのところに先ほど追加したドメインが表示されているはずです。 ドメインが追加されていることが確認できたら、Domain Nameの右にあるDNS Targetをコピーします。
DNS Targetは、[ランダムな文字列].herokudns.comみたいになってるはず。
ムームードメイン側の設定
すると、左側のサイドバーの一番上にドメイン操作とあるはずなのでそれをクリックして、
この時点で、自分が取得しているドメインの一覧が出てくるはずです。(出てこない場合はページに記載されている指示通りに進めると表示されるようになります。)
⑶その後、設定したいドメインの処理の欄にある変更ボタンをクリックする。
すると、「カスタム設定のセットアップ情報変更」と書かれたページに行くので、そのページの設定2のサブドメインを空、種別をALIAS、内容に先ほどコピーしたDNS Targetをペーストします。優先度も空にして、
⑷セットアップ情報変更をクリックしたらこれで全ての設定が終了です!
僕の場合は、その後2分ほどでHerokuにドメインが反映されて、接続できるようになりました。 人によって違うようなので、少し待ってみて反映されてないようであれば、もう一度設定を見直してみてください。
面倒な検索作業を他の人に手伝ってもらえるサービス「Linch(リンク)」をリリースした
「助け合って検索する」をテーマにしたサービス「Linch(リンク)」のβ版をリリースしました!
面倒な検索作業を他の人に手伝ってもらえるサービス「Linch(リンク)」のβ版を改めてリリースしました!https://t.co/fm2m4B5c7U
— TaKO8Ki (@takoyaki3160) February 19, 2019
検索するのが億劫な時やあまり時間が取れない時に「Linch」に投稿すると、代わりに誰かが検索してくれるのを理想としたサービスです。#Linch #RT拡散お願いします
もし良かったら、拡散していただけたら嬉しいです!
リリースしたサービス
追記 2月22日
ご要望をいただいたので、Twitterアカウントでのログインを実装しました! もしよければ、Linchで情報収集してみてください!
サービスの概要
「Linch(リンク)」は、自分の知りたいことについて投稿すると、他のユーザーから関連するサイトのURLを教えてもらえるサービスです。 あるタスクに取り組んでいる時に、次のタスクで必要な情報を事前に手に入れておくなど、検索時間を短縮することに貢献できればと思っています。
トップページ
どこがリンクでどこがボタンとなっているかなど、できる限り見やすさを意識したデザインになるように心がけました。
投稿ページ
投稿するのは、知りたい情報に関するタイトル・タグ・概要のみです。少しでも画面遷移を少なくするためにポップアップで投稿できるようにしました。
記事表示ページ
ページ上部には、記事のタイトル・タグ・本文がページトップに表示されています。また、ページ下部には、記事に対して他のユーザーから投稿されたリンクの一覧を表示しています。
ユーザーページ
ユーザーが書いた記事に投稿されたリンクの合計いいね数・ストック数と記事の一覧が表示されています。
使用した技術
- Ruby・Ruby on Rails
- nokogiri (スクレイピングで有名なgem)
- acts-as-taggable-on (スペース区切りでタグを付けられるようになるgem)
- google-analytics-rails (google analyticsが簡単に導入できるgem)
- JavaScript・jQuery
画像を保存するストレージです。Herokuのアドオンとして利用できるのが非常やりやすかったです。
sitemapを保存するために利用しています。
Git・GitHub
- Postgresql
取り敢えず、Hobbyプランを利用しています。非常に簡単にWEBサービスを公開できるので、サービスの開発そのものに注力できました。
アイコン
- ボタンなどのアイコンは色々なフリー素材にお世話になりました。
また、ムームードメインでドメインを取得したのですが、ムームードメインで取得したドメインをHerokuで公開しているサービスにルートドメインとして設定する方法に関する情報があまり見つからなかったので、あとで記事を書いて追記したいと思います。
追記:記事を書きました。 Herokuで公開しているサービスに独自ドメインをサブドメインなしで設定する(ムームードメインの場合)
費用面
現在幸運にも大学生という身分なので、GitHub Student Developer Packを利用することができます。 学生の方は下記のリンクから受け取ることができます。 GitHub Student Developer Pack
GitHub Student Developer Packの特典の一つとして、下記のようにHerokuのHobbyプラン二年分($168分)が無料で使えるようです。
Heroku : One free Hobby Dyno for up to two years (valued at $84/year).
そのため、現在は、Herokuに対する費用は一切かかっていません。 また、Amazon S3に関しても無料枠内で収まると思われるので、一年間はドメインの取得料のみが費用になりそうです。
Linchの特徴
非ログインでもリンクの投稿といいねができる
twitterなどSNSに記事を投稿してURLを募集することを考えて、非ログインでもリンクを投稿したり、いいねができるようにしました。 ただし、リンクを募集するにはログインが必要です。
いいねが連打可能
好きなだけいいねが押せたほうが面白そうなので、いいねを連打することができるようにしました。 いいねボタン連打するだけでもいいので使ってみてください! いいねボタンを連打しにいく - Linch
とにかくシンプル
欲しい情報が素早く手に入る状態を目指したかったので、情報を「リンク(URL)」として集めるというシンプルな設計にしました。
リリースしてみての感想
やってみることの大切さ
ある程度の技術を身につけたら取り敢えず、何か作ってみることの大切さを改めて実感しました。例えリリースまで行うことができなくとも、コードと格闘して実装することを繰り返していると知らぬ間に技術は身についていくと感じました。
不安な気持ち
Linchの大部分を開発し終わった時に、あまりsearch engineとの差別化ができてないように思いましたが、完成させてみることが大切だと思ったので、一旦その考えは心の奥底にしまいました。 また、大学では、情報系の学科に通っているわけではないもあって、サービスのフィードバックなどを受け取る機会が非常に少なかったです。これからいろんな方にフィードバックをもらえる機会を増やしていきたいです。
デザインの難しさ
やはり、デザインは非常に難しいです。デザインに凝りすぎると沼にハマりそうだったので、諦めの気持ちも大切だと思いました。cssも勉強したいと思います。
最後に
プログラミングを始めてから八ヶ月という段階でついに自分が作りたいものを形にする段階まで来ることができました。 これからも触れていきたい技術がたくさんありますが、自分が習得したことを臆病にならずにアウトプットしていこうと思います。
現状、自分ひとりで投稿を続けている状態なので、一人目のユーザーお待ちしています! また、バグ・デザインの乱れがあれば、教えていただければありがたいです。
もしよろしければ、いいねボタンを押していただけたら嬉しいです!
ご覧いただきありがとうございました!
追記
①自動更新されるウィークリーいいねランキングに載せていただきました。 https://qiita.com/takeharu/items/bb154a4bc198fb102ff3#_reference-1eb95e9a3ff1e12b75d1
②多くの人にご覧いただけて非常に嬉しいです!もしよろしければ、何か投稿を残していただけれるとさらに嬉しいです!
③2/20 16:10頃からLinchを訪れてもエラーが表示されてしまっていましたが、16:25には復旧しました。
Railsでoauth access tokenなどを暗号化した
目的
方法
- gemなど、色々な暗号の方法がある。
- 結果的に今回は、Rails5.2から導入されたEncrypted Credentialsを利用することにした。
実際やってみる
以下のコマンドを叩く
$ EDITOR=vim bin/rails credentials:edit
EDITORの部分でエディターを指定できるらしいけど、環境変数:EDITORを設定しておかないといけないので、今回はvimで行う。
vimが開いて、下記のようになる。
# aws: # access_key_id: 123 # secret_access_key: 345 # Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies. secret_key_base: #######################
vimのコマンドをよく忘れるので、下記のURLを貼っておきます。 qiita.com
vimで編集したら、:wq入力して保存。 保存したら、
- config/credentials.yml.enc
- config/master.key
が生成される。
この時、master.keyにあるのは暗号化の鍵なので.gitignoreに追加されるようになってる。※
値の取り出し方
secret.yml
hoge: 123 fuga: fuga_id: 345
上記のようになっている場合は、下記のように値を取り出せる。
Rails.application.credentials.hoge # => "123" Rails.application.credentials.fuga[:fuga_id] # => 345
※何故かmaster.keyがレポジトリに表示されていた
今回、上記のように暗号化をしてみたが、なぜかmaster.keyがレポジトリに上がってしまっていた。 これでは、暗号化の意味がないので、自分で.gitignoreしないといけない。
そんな時は、下記のようにしてから、commitしてpushしたらファイルがGIthub上に表示されなくなる。
$ git rm -r --cached config/master.key
参考
Railsでbundle installしたらnokogiriでエラー出る現象
bundle installしたらnokogiriのインストール中にエラー出た
bundle installすると、途中で下記のようなエラーが出る。
Fetching nokogiri 1.10.1 Installing nokogiri 1.10.1 with native extensions Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
ググってみたら、色々出てきたけど、最終的に公式ページ見るのが一番良いみたい。
Macで、公式ページ通りの手順通りに進めていくと、下記のようになる。
gem update --system
xcode-select --install # Then agree to the terms, even if you have done this before!
gemが最新のバージョンかどうか確認して、
gem install nokogiri
これでもう一度bundle installしたらうまくいった!