Laravel・TwtterAPI・AWSでWebサービスをリリースする練習をした

スポンサーリンク

ここ最近はコロナによる外出自粛、仕事もすべてリモートになったので、家にいる時間が増えました。

GWの長期休暇も旅行を計画していましたが、それも中止になったので何やろうかと思ったところで、ふと「Webサービスを作ろう」と思い立ちました。

最終的には公にリリースするのではなくただの練習になりましたが、色々と勉強になったのでそのまとめです。

この記事でできること

詳細は個々の記事に記載していますが、まとめるとこんな内容です。

  • Laravel環境の構築
  • TwitterAPIの申請から検索条件を指定したツイートの取得
  • AWSを利用したリリース

あくまで学習中なので、杜撰な点も多いと思うので参考程度に見てください。また「こうした方が良い」などのアドバイスがあれば教えていただけたら嬉しいです。

最終的にできたもの

主な機能

  • キーワードで検索
  • 日付と期間を指定してその範囲のツイートを取得
  • 時間ごとのグラフを表示

ソースは、最後にあるGitHubから取得できます。

作成当初の知識レベル

  • web開発経験は半年くらい、ある程度のコードは書くことはできるけど環境とか深い内容は勉強不足
  • プログラミング、DBの基本的な知識はあると思う
  • インフラはほぼ素人
  • Laravelの勉強として「Laravel入門」を終えた直後

作ろうとしてたもの

原案:Twitterの詳細検索

最初にWebサービスを作ろうと思った時に考えていたのは、ツイートの詳細検索でした。

公式でツイートの検索はできるものの使いにくさを感じていたので、より使いやすく、検索項目も増やしたりしてツイートをより検索しやすくするようなものを考えていました。

そもそも思いつきで始めたことなので、あまり壮大なものになると時間的にも技術的にも挫折することが目に見えていたので、APIを利用したものであれば工数を減らしてそれっぽく形にできるかなと考えました。

TwitterAPIの制限

しかし、調べるとTwitterAPIは無料プランだと過去7日間しかツイートが取得できないようで早々に企画倒れ。

API access that scales with you and your solution

よく考えれば制限があるのは当たり前といえば当たり前なので、無料で全部使おうとしてたのが浅はかでした、こういうのもちゃんと利用しようとしないとわからないですね。

再考:過去7日間検索・グラフ化

TwitterAPIの制限内でなんとか形にしようと思い、過去7日間で指定した期間のツイートを検索して時間ごとのツイート数をグラフ化するモノを作ることにしました。

そもそも最初にTwitterを開発のテーマにした理由の一つに、自分がテレビを基本的に録画、ラジオをタイムフリーで利用しており、リアルタイムとずれながらもリアルタイムの盛り上がりを追う時にTwitterでリアルタイムのツイートを見たりするので、それをより便利にできないかということから着想を得ました。

しかし、ここでまたTwitterAPIの制限で無料版だと一定時間のリクエストが限られてしまうということが発覚したため、正式に公開することを諦めました。

調べれば工夫してやりようはありそうですが、「サービスの根幹を外部のAPIに任せるのは良くない」という意見もあって、それが腹に落ちたので開発の方針を変更することにしました。

ここで辞めようとも思いましたが、これまでプログラミングをしている中で仕事以外でモノを作りきったことがなかったため、勉強と割り切ってとりあえず作ってリリースを体験してみようということで続行しました。

やったこと

すべてではありませんが、ポイントとなった手順を個別にまとめてみました。

主な環境やライブラリ

環境

  • Mac:macOS Catalina 10.15.4
  • PHP:7.3.11
  • Laravel:7.5.2
  • Mysql:8.0.19(今回は独自のテーブル等は作成しませんでした)

ツール

  • Redmine:タスク管理
  • Bitbucket(Sourcetree):ソース管理

ライブラリ

  • C3.js:グラフ作成
  • Colorbox:画像・動画のモーダル表示
  • Remodal:検索画面のモーダル表示

環境構築

実装

リリース

  • (作成予定)AWSにnginxをインストールしてLaravelプロジェクトをリリースする

その他やりたかったこと

正式にリリースしないので時間やモチベーション的にもすべてのやりたいことは盛り込まず、最低限で終わりにしましたが、このようなこともやろうかと考えていました。

機会があれば何かしらの形で取り組みたいと思います。(機能的なことでインフラのあれやこれやは除いています)

  • 大量検索と無限スクロール
    • ツイートを検索する際、該当するツイートをすべて検索するためレスポンスが遅い
    • 100件程度を取得して画面をスクロールした時に次の100件を取得するような仕組みにしたかった
  •  検索のバリエーションたくさん
    • 完全一致検索、除外検索、などTwitterAPIで用意されている検索条件はたくさんあるので、それらを使いやすい形で実装したかった
  • ソート順
    • 現在は新しいツイートから表示されてしまうため、時系列でツイートを読みたい場合は最後までスクロールする必要がある
    • 検索時にソート順を切り替えられるようにしたかった
  • 複数キーワードのグラフ
    • ある範囲の時間で複数のキーワードがどれだけツイートされたかを視覚的に表示するようにしたかった(例えば、裏番組とのツイート数の比較とか)
  • 適切なエラーハンドリング
    • TwitterAPIの仕様で予期せぬエラーが発生することがある
    • エラーログは出すようにしているが、エラーページなどを用意していないのでちゃんとしたエラーハンドリングをしないと実用に耐えない

あとがき

4月中は、在宅で仕事のプログラミングして、終わったらこのプログラミングをするような日々でした(端末は当然別で、データのやり取りもしていません。念のため)とはいえ、自分の考えていることを形にしていく過程は楽しかったです。

自分でモノを作ってみるとわからないことも多く、ネタがたくさんできるので久しぶりにまとめてブログを更新しました。そして、やはりオリジナルで開発していくと参考書とか教材よりよっぽど勉強になります。

練習ではありますが一通りやってみて色々と課題も見つかりました。今回は公にリリースすることはしませんでしたが、練習した教訓を活かして近い内にまたアイデアをまとめて今度はちゃんとした形で何かリリースしたいなと思っています。

ソース

GitHub:naoto-mitsuya / timeline_with_chart

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です