2018-10-26に更新

なぜCrieitを作り始めて55時間で公開できたのか?

先日Crieitをαααバージョンとして公開しました。公式ツイッターがつぶやいていたので多分5/29だと思います。

Crieit コミュニティlike Qiita dev to  3公式  crieitcommunity さん   Twitter.png

そういえば作り始めたのはいつだっただろう、と思い見てみました。多分artisanの日付だと思うので5/1。

Screenshot from 2018-06-05 23-12-27.png

ということで大体1ヶ月弱だったようです。

毎日開発出来たわけではないと思いますが、ちょっと多めに作業した日もあると思いますのでだいたい平均2時間として、30日はいかないので多分おおよそ合計55時間ほどでしょうか。フルタイムで考えると約7人日。~~仕事やめれば毎週これくらいの規模のものをリリースできることになりますね!~~

これは速いのでしょうか? そうではないのでしょうか? 具体的に何をやってたかを述べつつ検証してみます。

開発環境構築

開発環境はDockerで構築しました。PHP7.2のDocker環境は以前に作っていたので、ちょっと修正してちゃちゃっとdocker-compose.ymlを作って完了です。他にもElixir & Phoenixや、goの環境などもあります。普段から色々作って慣れておくと急に何か作りたい時に速く走り出せます。

なので開発環境にDockerをよく使っているエンジニアだったらだいたいこんな感じで普通だと思います。

あとはLaravel Installerを使ってインストールすればアプリケーションもすぐ動作します。

実際に開発すること

実際の開発ですが、正直あまりコードも書いていないと思います。とりあえず色々なパーツを組み合わせていくことがメイン。具体的には下記のような事などです。

Laravel Socialite

Socialiteを使うことで簡単にソーシャルログインが作成できます。これもマニュアル通り作るだけ。

僕はソーシャルログイン情報保存用にテーブルを分けましたが、Laravelは最初からユーザーのモデルとマイグレーションファイルも入ってますのでそれを改造するだけでもいいかもしれません。

JavaScript

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開発者

Crieitの開発者です。 主にLAMPで開発しているWebエンジニアです(在宅)。大体10年程。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel5, CakePHP3, JavaScript, RoR 趣味:Elixir, Phoenix, Node, Nuxt, Express, Vue等色々

Crieitはαバージョンで開発中です。進捗は公式Twitterアカウントをフォローして確認してください。 興味がある方は是非記事の投稿もお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか
関連記事

コメント