8年振りに会社ページがリニューアルされました。
hugoで作ってGithub Pagesで公開しています。
デザインに関しては@machidaさんの記事をご覧ください。
会社サイトをリニューアルしました | FJORD, LLC(合同会社フィヨルド)
デザインもhugoも@machidaさんがやったので僕はほとんど何もやってないですが、
「ページをpushするとCircleCIでbuildしてアップ」
という部分だけやりました。
fjordllc/fjordllcリポジトリのsourceブランチにmarkdownの記事ファイルをアップするとCircleCIがhugoでbuildしてmasterにpushします。 masterブランチのdocsディレクトリがGithub Pagesで公開されるようになっています。
CircleCIのcircle.yml
general:
branches:
ignore:
- master
machine:
timezone: Asia/Tokyo
node:
version: 8.2.0
dependencies:
pre:
- git config --global user.name "Masaki Komagata"
- git config --global user.email "komagata@gmail.com"
- wget https://github.com/gohugoio/hugo/releases/download/v0.26/hugo_0.26_Linux-64bit.deb
- sudo dpkg -i hugo_0.26_Linux-64bit.deb
compile:
override:
- HUGO_ENV=production webpack
- hugo
test:
override:
- echo "dummy"
deployment:
production:
branch: source
commands:
- ./deploy.sh
deploy.sh:
git clone --depth=1 git@github.com:fjordllc/fjordllc.git master
cp -rp docs master/
cd master
git checkout master
git add docs
git commit -a -m "Update articles"
git push origin master --force
ハマッたところ
Custom domain設定が定期的にリセット
Github Pagesは以前は対象の公開directory/CNAME
というファイルにcustom domain名を書くことで設定することになっていました。
これは最近、githubの管理画面から入力できるようになりました。管理画面で入力したものが自動的に公開directory/CNAME
に保存されるというラッパー的な機能です。
僕はreposが勝手に更新されるということが頭になかったので、hugoでbuildするたびに対象ディレクトリをクリーンアップしていました。
そのため、buildするたびにcustom domain設定がリセットされてしまうということになっていました😢
buildが永久ループ
pushをトリガーにCircleCIがbuildして自分のmasterにpushするので永遠にbuildが続いてました😢
CircleCIにはbuildしないbranchを指定できるのでmasterではbuildしないようにしました。
次にやりたいこと
esa.ioをhugoのエディターとして使うというのをやりたいです。
連携の設定をやってみたのですが、esa.ioが吐くFront MatterはMiddleman用のものなので、hugoでは日付フォーマットやurlの追加などちょっと手を加える必要があるようでした。
class UsersController < ApplicationController
...
def user_params
params.require(:user).permit(
:email,
:first_name,
:last_name,
:first_name_kana,
:last_name_kana,
:profile
)
end
end
こんな風にpermitするparameterがたくさんある時、
class UsersController < ApplicationController
...
def user_params
params.require(:user).permit(%i(
email
first_name
last_name
first_name_kana
last_name_kana
profile
))
end
end
こう書くと増減した時のメンテが楽。
概要
テスト用のfixturesとseedデータを$ rails db:fixtures:load
を使うことによって共通化する方法です。
やり方
db/seed.rb
にこう書く。
# db/seed.rb:
Rake::Task["db:fixtures:load"].execute
メリット
- seedとfixturesがDRYになる。
- テスト時のデータが画面から見える。
- テストに使っているエッジケースのデータを普段から意識するようになる。
Q&A
Q. factory_girlの場合は?
A. factory_girlは素人にはおすすめできない。まずはRailsデフォルトのfixturesを使いこなしましょう。
Q. seed-fuは?
A. 窓から捨てましょう。
Q. 画像ファイルがseedに必要な場合は?
A. 良い質問です。こちらを参考にしてください。
先日PS VRを手に入れました。PS VRはメガネありでも使えるんですが邪魔くさいので前々から気になってたレーシックをやりました。
結論から言うとやってよかったし、どうせやるならもっと早くやればよかったと思いましたね。
仕事もゲームもメガネ無しは快適だし、今までは寝っ転がる時とかも常にメガネを気にしてたんだなあと思いました。
検査から手術まで1日でやるコースだったので時間もかからなかったです。一週間ぐらい前に電話で予約して、当日の午前中に検査、午後に手術という感じ。
「眼球用カンナとか怖えな・・・」
などと思ってましたが、基本カンナではなくレーザーで、施術中は水中でぼやけた色とりどりの光が見えてるような状態で、何やっているのかはさっぱりわかりません。
「キャトルミューティレーションされたらこんな感じだろうな。」
と思ったのを覚えています。
トータル22万ぐらいかかりました。
僕がやったところは品川近視クリニックっていう東京近辺で検索したら一番上に出てくるようなところなんでまあ無難なとこです。
手術後の帰り道は言われてた通り視界がちょっと白く濁りますが普通に電車で帰れる程度。次の日起きたら普通にメガネをかけてたときぐらい見えるようになってました。
失敗した
やったあとに知ったんですが、紹介制度を使えば4万円引きになったみたいなんですよね・・・。
4万円あったら芋けんぴが400袋買えるじゃないですか。かなり凹みました・・・。
これからレーシックやる人は絶対やる前にTwitterでもなんでもいいので聞いて、誰かの紹介を利用したほうがいいと思います。紹介する方にも4万ぐらい入るそうなんで紹介してくれる人いっぱいると思うんで。
誰もいなかったら僕が紹介するんでTwitterで@komagataあてにでもはなしかけていただければすぐ紹介します。
よくある下記のようなアカウント編集ページをdeviseで作る場合。
- パスワードとパスワード(確認)を入力した場合はパスワードを更新。
- パスワードを入力しなくても他の項目(emailなど)は更新可能。
こんな感じでresource.update_without_passwordを使い分ければOK。
# app/controllers/registrations_controller.rb:
class RegistrationsController < Devise::RegistrationsController
protected
def update_resource(resource, params)
if params[:password].present? && params[:password_confirmation].present?
resource.update_attributes(params)
else
resource.update_without_password(params)
end
end
end
簡単だけどdeviseのWikiには載ってないようなので。
db:fixtures:loadを使えばseed-fuなどを使った場合に起きるseedデータとテストデータの二度書きの手間無くなります。
しかし、paperclipで画像を保存してる時など、fixturesからは読み込めないものを保存している場合に対応できません。
僕は下記のようにして解決しています。
rakeタスクを書く
db:image:load
という画像をアップするtaskを書く。
# lib/tasks/fixtures.rake:
namespace :db do
namespace :images do
desc "Upload images."
task load: :"db:fixtures:load" do
User.all.each do |user|
path = Rails.root.join("test", "fixtures", "files", "users", "avatars", "#{user.name}.jpg")
user.update!(avatar: open(path)) if File.exist?(path)
end
end
end
end
db:fixtures:loadの後に実行する
# lib/tasks/fixtures.rake:
...
Rake::Task["db:fixtures:load"].enhance do
Rake::Task["db:images:load"].execute
end
これでrails db:fixtures:load
すればその後で画像も入ります。
さる4月1日、ローカルインターンのK氏こと亀澤くんが永和システムマネジメントへ新卒として就職しするためインターンを卒業していきました。
関連:railsのインターン
周りにプログラミング経験のある友人はおらず、趣味がダンスと野球というローカルインターンとしては今までいなかった健全なタイプだったため、納会では @machida さんがFCキャプ翼2を厳しく指導したのも良い思い出です。
それにしても改めて調べてみると、チンカスプログラマーこと @hrysd から数えて弊社インターンから永和システムマネジメントさんに就職した人数はなんと亀澤くんでなんと5人目!
まだ誰も辞めた人はおらず、@hrysd もチンカスの癖に結構活躍しているようです。
みんなハッピーになっているようなのでぜひ事業化したいのですが、上手いマネタイズ方法が思いつかず現在に至ります…。
収益が無いとあまりガッツリリソースを使うこともはばかられるので難しいところです。
なにわともあれ、@machida さん情報によると亀澤くんも既に案件に配属されており、元気にやっているようでよかっったです。