@machidaさんがholiday-jpのアイコンを作ってくれました。

https://gyazo.com/1488e11d6d99c10cd0e8a52ce459fa3d

かわいい!ありがとうございます!

最近、Next Holidayのリニューアルでholiday-jpを久しぶりに触ったらAPIが糞過ぎた。

nextとかprevとかのメソッドが無いなんて使い辛スギィ > 昔の俺

8年振りに会社ページがリニューアルされました。

Fjord, LLC

https://gyazo.com/1b08a0812b9ad48186bb98309ca57257

hugoで作ってGithub Pagesで公開しています。

デザインに関しては@machidaさんの記事をご覧ください。

会社サイトをリニューアルしました | FJORD, LLC(合同会社フィヨルド)

デザインもhugoも@machidaさんがやったので僕はほとんど何もやってないですが、

「ページをpushするとCircleCIでbuildしてアップ」

という部分だけやりました。

https://gyazo.com/6eb17855ad55e53f0ce9302bc099611e

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

こう書くと増減した時のメンテが楽。

https://gyazo.com/3dc2e3fa74ea4c8439c92a455fb82ba2

https://gyazo.com/ce4278cef60e690514be5a446071da75

Preference > Editor > General > Appearance > Show parameter name hintsをオフ

https://gyazo.com/9f5a051974e11ba93489972acfba17bb

@jnchitoさんありがとうございます!

概要

テスト用の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. 良い質問です。こちらを参考にしてください。

db:fixtures:loadの後処理をする - komagataのブログ

先日PS VRを手に入れました。PS VRはメガネありでも使えるんですが邪魔くさいので前々から気になってたレーシックをやりました。

結論から言うとやってよかったし、どうせやるならもっと早くやればよかったと思いましたね。

仕事もゲームもメガネ無しは快適だし、今までは寝っ転がる時とかも常にメガネを気にしてたんだなあと思いました。

検査から手術まで1日でやるコースだったので時間もかからなかったです。一週間ぐらい前に電話で予約して、当日の午前中に検査、午後に手術という感じ。

「眼球用カンナとか怖えな・・・」

などと思ってましたが、基本カンナではなくレーザーで、施術中は水中でぼやけた色とりどりの光が見えてるような状態で、何やっているのかはさっぱりわかりません。

「キャトルミューティレーションされたらこんな感じだろうな。」

と思ったのを覚えています。

トータル22万ぐらいかかりました。

僕がやったところは品川近視クリニックっていう東京近辺で検索したら一番上に出てくるようなところなんでまあ無難なとこです。

手術後の帰り道は言われてた通り視界がちょっと白く濁りますが普通に電車で帰れる程度。次の日起きたら普通にメガネをかけてたときぐらい見えるようになってました。

失敗した

やったあとに知ったんですが、紹介制度を使えば4万円引きになったみたいなんですよね・・・。

4万円あったら芋けんぴが400袋買えるじゃないですか。かなり凹みました・・・。

これからレーシックやる人は絶対やる前にTwitterでもなんでもいいので聞いて、誰かの紹介を利用したほうがいいと思います。紹介する方にも4万ぐらい入るそうなんで紹介してくれる人いっぱいると思うんで。

誰もいなかったら僕が紹介するんでTwitterで@komagataあてにでもはなしかけていただければすぐ紹介します。

よくある下記のようなアカウント編集ページをdeviseで作る場合。

https://gyazo.com/e7b9fc1bbc0df4ccc501d3d861e76e58

  • パスワードとパスワード(確認)を入力した場合はパスワードを更新。
  • パスワードを入力しなくても他の項目(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には載ってないようなので。

現状、HTMLメールでsvgを使うのは辞めたほうが良さそうです。

https://gyazo.com/19e4e37f18ef7c7dce11c01925c9ecbf

なぜなら、Gmailはセキュリティのために画像などの外部リソースを専用のプロクシ的なもの経由で表示しますが、svgは表示させてくれないようです。

Hotmailなどの他の直接表示する系サービスは問題ないです。

とりあえず、pngを使うことで回避。

svgの方が軽さとか汎用性とかいろいろ便利なんで使いたいんですけどね。

おっさんがもくもくとゲームを配信するこまゲームスチャンネルを解説しました。

https://gyazo.com/d428d11311ecabb0161261868183d953

こまゲームス

最近はFallout4やLet it dieをやっております。

応援・チャンネル登録よろしくね!

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すればその後で画像も入ります。