先日Crieitをαααバージョンとして公開しました。公式ツイッターがつぶやいていたので多分5/29だと思います。
そういえば作り始めたのはいつだっただろう、と思い見てみました。多分artisanの日付だと思うので5/1。
ということで大体1ヶ月弱だったようです。
毎日開発出来たわけではないと思いますが、ちょっと多めに作業した日もあると思いますのでだいたい平均2時間として、30日はいかないので多分おおよそ合計55時間ほどでしょうか。フルタイムで考えると約7人日。仕事やめれば毎週これくらいの規模のものをリリースできることになりますね!
これは速いのでしょうか? そうではないのでしょうか? 具体的に何をやってたかを述べつつ検証してみます。
開発環境はDockerで構築しました。PHP7.2のDocker環境は以前に作っていたので、ちょっと修正してちゃちゃっとdocker-compose.ymlを作って完了です。他にもElixir & Phoenixや、goの環境などもあります。普段から色々作って慣れておくと急に何か作りたい時に速く走り出せます。
なので開発環境にDockerをよく使っているエンジニアだったらだいたいこんな感じで普通だと思います。
あとはLaravel Installerを使ってインストールすればアプリケーションもすぐ動作します。
実際の開発ですが、正直あまりコードも書いていないと思います。とりあえず色々なパーツを組み合わせていくことがメイン。具体的には下記のような事などです。
Socialiteを使うことで簡単にソーシャルログインが作成できます。これもマニュアル通り作るだけ。
僕はソーシャルログイン情報保存用にテーブルを分けましたが、Laravelは最初からユーザーのモデルとマイグレーションファイルも入ってますのでそれを改造するだけでもいいかもしれません。
Laravelは最初からVueが入っています。そのためcsrfトークン用のヘッダーを設定したり色々初期化などしなくてもすぐVue & axiosで開発できます。
yarn run hot
でホットリロードできるので、jsファイルを更新するとすぐ勝手にブラウザに反映もされます。
ここもタグ入力コンポーネントであるvue-tags-inputと、markdownエディタであるTOAST UI Editorを使ったので、ほとんどそれでできてしまいます。あとはボタンをつけたり通信して保存したりするだけ。
今回自分で使いたかったので、はてなブログからのインポートを作成しました。
直リンクはダメだと思うので画像を取得して保存したり、はてなブログの独自リンクタグを通常のmarkdownに変換するために各リンクのhtml & titleタグを取得して、文字コードがおかしかったり404でエラーになったりして無限ループになり画像を何千も保存してしまったり(無料枠じゃなかったら怖いですね)
本質とは関係ない機能なのですが、ここで結構時間を使ってしまったと思います。高速開発重視だったら絶対に手を出してはいけないところですね。
まあ何しろ、上記のように実際には開発が速いわけではなく、そもそもそんなにやる事がない、という事が分かるかと思います。ベースとなるのは記事データのテーブルだけで、あとは適当にタグ等がbelong belongとくっついているだけですので。
公開方法は色々あると思いますが、僕はGoogle Compute Engineのf1-microがAlways Freeになってからはずっとそればかり使っています。もう7, 8アプリケーションくらいはそれで公開しているのでだいぶ慣れています。
そもそも、仕事も趣味もプログラミングなので、それ以前からアプリケーションを公開するためのサーバー設定は慣れています。(メンテナンスとかはよくわかっていません)
ただ、慣れているかは関係なく、Google Compute Engineでリリースしたアプリケーションについては、アプリケーションを公開するまでのコマンド実行手順を全部メモっているので、それを見て実行していくだけでちゃちゃっとリリース出来てしまいます。こうやって最初だけ頑張って色々書き残しておくと、その後が非常に楽です。
そもそも、現在αバージョンです。前述の通り、メインとなる記事テーブル周りの処理だけを優先して作っており、それ以外のところはほとんど作っていません。ユーザーのプロフィール編集機能もありませんし、「いいね」機能もコメント機能すらありません。
つまり、公開優先でそもそも完成すらしていないので、何もやっていないからすぐ公開できた、というだけなのです。多分同じくらいの経歴のエンジニアならサービス全体をちゃちゃっと見るとすぐ感じたと思いますが、特に何も速いわけではありません。むしろインポート作ってたせいで遅いくらいでしょう。
以上の通り、公開できた理由は速かったわけではなく、単純にそれくらいしか作らなかったために早かっただけです。
WEBサービスを実際にいくつか作った事がある人ならわかると思いますが、想像以上に人は集まりませんし成功しません。あまり頑張りすぎても誰も使ってくれず無駄になることが多いので、あまり作りこまずにとりあえず公開可能なところで区切って使ってみてもらうことが割と重要だったりします。どうやって速く作るかじゃなく、どうやって早く公開するか、というところです。
もちろんガッツリ作りこんだ方がいいパターンもあるかもしれませんのでそれはプロジェクトの方針等から適宜決める必要があるのかもしれません。
失敗したら次を考えて(既にもう色々作りたいものがあるので)どんどん作っていきたいので、こういった形でうまく行くかを早めに判断する手法は大字です。
ちなみにCrieitは失敗しても僕のブログになるので特に終了することなく永久に継続予定です。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント