![見出し画像](https://assets.st-note.com/production/uploads/images/8322672/rectangle_large_type_2_d21bd300c64aafc2c531aee8e64dfed0.jpg?width=1200)
実績作りのアイデアその4
fortune という古いlinuxのプログラムがある。某アイドルグループの歌にも出てきたフォーチュンクッキーを起源とするランダムテキスト抽出プログラムだ。名言や故事などの短いテキストをランダムに選択して表示するもので、雑に表現するならcsv等のテキストファイルから1行取り出して出力するだけの簡単なプログラムなので、実績を作りたいなら手早く実現できる可能性がある。(ちなみに本来のプログラムの中身は言うほど単純ではない。念のため)
最初期(SSR)
最初期は前述のようにcsv等のテキストファイルからランダム抽出して、テキストをhtmlのテンプレートに埋め込んで返却するだけのSSRが手軽でいいだろう。常にCGI的な動作をするのでWebの勉強にもちょうどいいはずだ。
発展1(JavaScript)
次にJavaScriptを組み込むのが自然の流れというものか。サーバ側でレンダリングするのではなく、データ部分は先のプログラムからデータ部分だけを取得してページに埋め込むのだ。これにはお手本がある。
この流れでOpenAPI等のAPI処理に慣れておくのはフロントエンドでもバックエンド(サーバサイド)でもオススメだ。
発展2(S3ホスティング)
データ量にも拠るだろうが、データをJavaScriptで扱えるデータ形式にして静的ファイル化してしまうという手法もある。この場合プログラム部分はサーバになくてもいいので、AWS S3などの静的ホスティングを使用することでサーバコストを極端に下げつつ、アクセス数増などでもダウンしにくい(誤解を恐れず言えばダウンしない)サイトにすることもできる。これはAWSなどのクラウド(GCPやAzureにもそれぞれS3同様のサービスがある)を使い始めるきっかけにもちょうどいいはずだ。
発展3(cookieまたはCDN)
fortuneはおみくじのようなものなので、cookieやCDN等を用いて一定期間中は同じデータが表示されるといいだろう。cookieならexpireされるまでの間保存しているデータを表示する(再リクエストをしない)ようにするし、CDNならCDNの機能でコントロールする(再リクエストするがCDNが同じデータを返してくれる)ようにする。フロントエンド寄りなら前者、バックエンドまたはインフラ寄りなら後者のコントロールができればいいだろう。(他にもやり方はいくらでもあるがここでは言及しない)
発展4(DBやcacheサービス)
WordPress等に慣れていればMySQL等のDBMSやMemcached,Redisなどを使ったことがあるだろう。fortuneにしても同様にDBやcacheを使用する形にすることができる。元データの形式をテキストからデータベースにし、その間にcacheを入れる、Webアプリケーションの基本構造なので、ここまでの理解は必要最低限のもののはずだ。
発展5(管理画面)
サービスはユーザに面した表の顔とは別に、データをコントロールする運用に面した裏の顔、管理画面があるのが普通だ。WordPressにも投稿用の管理画面があるのでなじみがある人も多いだろう。fortuneのような簡易なプログラムの場合に大規模な管理画面は必要ないかもしれないが、管理用のユーザ管理、ロール、更新履歴管理など、つけようと思えばいくらでも機能が必要になるところなので、この辺りについても独自に実現できていれば、十分な実績になるだろう。
応用1(SPA,PWA)
発展2の流れからJavaScriptのフレームワークを使用したSPAやPWAを学ぶのはどうだろう。先のお手本のサイトはjQueryというフレームワークを使用しているが、最近で言えばAngularJSやVueJSといったモダンなフレームワークが多数あるので、好きなものを選ぶといいだろう。もしくはアピールしたい企業が採用しているフレームワークを選択するのもいい判断かもしれない。
応用2(広告)
せっかく実績作りのためのサイトを作るのであればWebでの広告の扱いにも慣れておくといいだろう。fortuneの元データを再利用しただけのサイトで広告を掲載しても、そもそもアクセス数が稼げないと思うが、管理画面まで用意したなら独自のデータ、最新のデータを提供することもできるはずだ。上手に宣伝してアクセス数を稼ぐことができるようになれば、モチベーションも高まるはずだ。
応用3(SEO,分析)
fortuneデータを使用したサイトでSEOは難しいかもしれない。だからといって工夫をしないでいい理由にはならないし、その付近の理解を怠っていいわけではない。Google Analytics のようにアクセス分析を行うのもその範疇だ。
別添1(独自fortune)
ここからは完全に趣味の領域だ。単なるfortuneサイトでは正直アクセス数は見込めないし、実績としてもデザインだけで判断されてしまったりして正直効果的とは言い難い。そこで機能面はそのままに、データを完全に独自にしていくことを提案する。具体的には、fortuneのデータは全て捨ててしまい、自分で集めた名言を表示するのだ。ただ名言を出すだけでは世の中の名言サイトの類と変わらなくなってしまう。そこで自分で思うことを注釈として加えるのはどうだろう。誰かの名言はその人のものだが、その名言について思うこと感じたこと考えたことは自分自身のものなのだ。利用者にアピールするのはそういったオリジナルなコンテンツが望ましいと思うのだ。
別添2(インフラレイヤー)
これらを実現するシステムのインフラ部分をコード化する試みが昨今ではIaC(Infrastructure as Code)と呼ばれている。AWSならCloudFormationのような各クラウド毎に専用のサービス機能があるし、それらを抽象化したTerraformやAnsibleといったツールもある。これらを使いこなすことで、同様のサイトを複数作ったり、万が一の障害時にも復旧を容易にすることができるだろう。
また、CI/CDと呼ばれるデプロイの自動化もインフラレイヤーでは必修だ。CircleCIやTravisCIなどのCIサービスとGitHub等のリポジトリホスティングサービスを組み合わせて、保存から適用までを自動化する仕組みを使うと、使っていなかった時代には戻れないほどの衝撃がある。既にそれなりの期間使われてきた技術のはずだが、未だに未着な企業も多いため、これから業界を目指すならぜひ理解しておきたいところだ。
別添3(スマートフォンアプリ)
このサービスはWebベースで十分機能するため、ネイティブアプリ化にはさほど意味がない。ただ、発展1で述べたようにOpenAPIに限って言えば、ネイティブアプリ側のコード練習にはもってこいのサービスになっているはずだ。1日1回アプリを開くとその日の名言が表示される。例えばソーシャルゲームのログインボーナスや夏休みのラジオ体操などのように、表示の記録を残せるようにするなど、工夫の余地がたくさんあるだろう。
fortuneとは少し違うが、最近読んでいる本も紹介したいと思う。別添1を発展させるとこういうことになるという話だ。
最後になったが画像はいつものぱくたそさん。ちょうどいいとは言えないかもしれないが、それっぽいところで。
フリーランスのエンジニア。主にサーバサイドからインフラ。フロントとアプリも出来るけどそんなに好きじゃない。noteはアウトプットの練習用。普段はTwitterにしかいない。