Algoliaを利用してサイト内検索機能を実装する

こんにちは。
当ブログのサイト内検索をしたことある方はお気づきかもしれませんが、サイト内検索にAlgoliaを利用しています。
(後述の事情により月初に使えなくなることがたまにありますが)動作速度もかなり早く、安定して稼働してます。

運用コストもゼロで、記事書いてPRをマージすれば記事公開日に勝手にコンテンツが検索対象に一手間加えてあります。
Algoliaを1ヶ月実運用してみたので、Algoliaはいいぞという紹介記事を書きたいと思います。

また、CQRS・DDDの勉強のために、フロントはReactとAlminで実装してみました。
Almin、CQRS、Fluxの小さな実装例の1つとしても参考になるかと思います。

MiddlemanのビルドにWebpackを組み込む方法

こんにちは。
当ブログはMiddlemanにて運用しているのですが、検索機能や遅延ロードなどで実装したJavaScriptのビルドにはAsset pipelineなどは使わずにwebpackでビルドしています。

Rails5.1が今betaで出ていますね。中でも目玉はwebpacker.gemによるモダンなフロントエンド開発がRailsに導入されることでしょう。 今までのRailsのasset pipelineとは別に、yarnによって依存性を管理しwebpackで結合する独立したjsのビルドシステムがサポートされます。 これによって、以下のような従来のasset pip

Rails5.1から導入されるwebpacker.gemは本当にRailsのフロントエンド開発に福音をもたらすのか? - Qiita

私も同意で、Railsはあくまでサーバサイドアプリケーションで、今まで対してフロントに気を使ってこなかったのだから、中途半端に内部に組み込むのやめてくれ派です。
MiddlemanはRailsのビュー層の部分だけ持ってきたようなものなので、当然同じ問題が発生します。

ということで、MiddlemanとWebpackが共存できる妥協点を探って、実際にこのブログに取り入れてみた結果を残します。

CLIアプリに使えそうな特殊文字たちで遊んでみた

こんにちは。
Githubのトレンドにvadimdemedes/inkというツールが上がっており、CLIといえばchjj/blessedやReact版のYomguithereal/react-blessedとかあったなぁ、と懐かしみつつ

そういえばPowerlineもシェルのアスキーアート的に表現されてるんだよな、
どうやってパンくずっぽいもの描画してるんだろう?

というのが気になったので調べてみたらおもったより面白そうだったので遊んでみました。

条件付きな構文が多い昨今のNode.jsのアロー関数の構文をまとめてみた

シンプルすぎて難解?昨今のNode.jsのオブジェクト周りの構文をまとめてみたに続いて、今度はアロー関数編です。 おそらく今まではこんな感じで関数を書いてたと思います

function hoge (options) {
    return 1
}

それがアロー関数の構文を使用すると、const hoge = options => 1なります
めちゃくちゃ短くて楽、特に高階関数とか書き出すと欠かせない書き方なんですが、構文のルールが結構複雑なので纏めてみようと思います

ちなみに、アロー関数におけるthisやスコープの話はしません。あくまで構文の話だけにとどめます。

Node.jsのProxyでdirty checkとmethod missingを実現してみる

過去にphpのマジックメソッドを使ってRailsのfind_all_by_*メソッドを実装してみる | WEB EGGという記事を書いたのですが、Node.jsでもProxyの登場により、似たようなことができるのでは? と思ったので試してみました。

今回の題材は、同じくRailsのActiveRecordから、ActiveModel::Dirtyモジュールです。

person = Person.new
person.changed? # => false

person.name = 'Bob'
person.changed?       # => true
person.name_changed?  # => true
person.name_was       # => nil
person.name_change    # => [nil, "Bob"]
person.name = 'Bill'
person.name_change    # => [nil, "Bill"]

こんな感じに変更を検知するためのマジックメソッド、ユーティリティが加わるモジュールだそうです。

昔であればBackbone.jsのモデルが似たような仕組みを提供していました。
ですが、あれば独自のセッタを提供しており、それを利用しているから変更が検知できるという仕組みです。 いわば白魔術です

今回は、 独自のセッタ を提供せず、普通にオブジェクト操作しているだけで変更検知ができちゃう機能の実装を目指します。
白魔術に対して言うなれば、黒魔術です。

ちなみに使用しているNode.jsのバージョンはv6.1.0です。