[ソフト] Brackets – Adobeが出資するオープンソースのエディタ

手元のMacに入れてみた。無料のエディタを探している人は試してみたらいい。

Brackets – A modern, open source code editor that understands web design.
http://brackets.io/

Brackets was founded by Adobe as a community guided, open source project to push web development editors to the next level. Brackets is released under the MIT License.

[Mac] 余計なお世話のスマート引用を無効化する

設定で無効化できるとは言え、デフォルトで無効にしておいて欲しいよね。

MacでEvernoteを使うときにダブルクォーテーション(“)を勝手に変換させない設定 | vdeep
http://vdeep.net/mac-evernote-double-quotation

Evernote、今度はスマート引用符でトラブル!?|ささびず 中小企業診断士 佐々木孝のビジネスサイト
http://sasakitakashi.biz/2015/01/13/smart-quotation-were-the-causes-of-the-trouble-by-evernote/

Evernote、全角マイナスへの変換を防ぐ方法|ささびず 中小企業診断士 佐々木孝のビジネスサイト
http://sasakitakashi.biz/2013/11/20/method-to-prevent-conversion-to-full-size-minus-in-evernote/

MacのEvernoteでダブルクオート(“)ががってに変換されるのを防ぐ – Qiita
http://qiita.com/katamuki/items/2f3b2130a210011845ae

[MySQL] MySQLのテーブル定義をExcelに出力する

今参加している案件はドキュメントがほとんどない。そう不満をこぼしてばかりでは先に進まないので、自力でドキュメントを作り始めよう。テーブル数が多いので、このソフト見つけたときには少し震えた。

A5:SQL Mk-2 – フリーの汎用SQL開発ツール/ER図ツール .. 松原正和
http://a5m2.mmatsubara.com/

A5:SQL Mk-2 でMySQLのテーブル定義をExcelに出力する
https://usortblog.com/a5-sql-mk-2/

[Laravel] インデックスするデータを絞り込む (Laravel Scout)

デフォルトだとSearchableなModelの全カラムがインデックスされる。

インデックスしたくないカラムがある場合はSearchableのtoSearchableArray()を上書きして、リターンされる配列からそのカラムのデータを除外すれば良いらしい。

参考サイト

Laravel Scout – Laravel – The PHP Framework For Web Artisans
https://laravel.com/docs/5.4/scout#configuration

[Laravel] ElasticSearchとLaravel Scoutで全文検索 (3) – Kuromojiセットアップ

Kuromojiは日本語の形態素解析ライブラリ。これ無しだと、日本語が分かち書きされない状態でインデックス化されてしまうので、日本語の単語で全文しようとしてもうまくヒットしないのだろうと想像する。

Kuromojiに関しては以下の説明が明るい。

Elasticsearchを日本語で使う設定のまとめ – Qiita
http://qiita.com/shin_hayata/items/41c07923dbf58f13eec4

Kuromojiのインストール

kuromoji – japanese morphological analyzer
http://www.atilika.org/

Japanese (kuromoji) Analysis Plugin | Elasticsearch Plugins and Integrations [5.5] | Elastic
https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-kuromoji.html

ElasticSearch同梱のユーティリティを使ってインストールする。

Kuromojを設定する

公式サイトを眺めてみたんだけど、はっきりと「設定はコレ」みたいな記事がない。

以下の記事がちょっと古いんだけど設定ファイルの記述があったのでなぞってみる。

Elasticsearch に kuromoji を入れて日本語全文検索をする – Qiita
http://qiita.com/mserizawa/items/8335d39cacb87f12b678

設定ファイル編集してElasticSeachを再起動したらログにエラーが出た。

API経由でインデックスごとに設定しろということらしい。

インデックスの変更前にはインデックスを一旦クローズする必要がある。そして設定を変更してから、インデックスを再度オープンすることで、新しい設定でインデックスが使えるようになる。これ少しハマったので以下記事を覚書リンク。

elasticsearch – error when trying to update the settings – Stack Overflow
https://stackoverflow.com/questions/19758335/error-when-trying-to-update-the-settings

これで設定が変わったので、古い設定のまま作成されているインデックスをいったん削除する。

再び記事をElasticSearchに流し込む。

インデックスのサイズを比べてみる。Kuromoji追加前のインデックスは記事12件で183KB。

Kuromoji追加後のインデックスは記事12件で292.9KB。

形態素解析により日本語が分かち書きされてインデックスされた結果だろう。

日本語の単語で検索したら今度はちゃんとヒットした。良さげ。

[Laravel] ElasticSearchとLaravel Scoutで全文検索 (2) – Laravel Scoutセットアップ

ElasticSearchのセットアップができたので、ここからはLaravel側のセットアップ。

Laravel Scountの組み込み

Laravel Scout – Laravel – The PHP Framework For Web Artisans
https://laravel.com/docs/5.4/scout

Laravel Scout Elasticsearch Driver
https://github.com/ErickTamayo/laravel-scout-elastic

 

これでセットアップは完了。

ElasticSearchへ既存データ注入

公式ドキュメントで説明されている通り、Laravel Scoutを組み込んだ状態だと、Eloquentでレコード追加/更新/削除を行うとElasticSearchも併せて更新されるようになる。しかし、ElasticSearch組み込み時点で既に存在するレコードは手動でElasticSearchに流し込まないといけない。

というわけで、既存レコードをElasticSearchに流し込む。

ElasticSearchのインデックスを確認。

コントローラから検索してみる

記事本文に含まれる日本語の単語を入れてみると、検索されるものあり、されないものあり。どうも挙動がおかしい。おそらく日本語の処理が上手くいっていないのだろう。

Kuromojiのセットアップへ続く。

[Laravel] ElasticSearchとLaravel Scoutで全文検索 (1) – ElasticSearchセットアップ

Laravel Scoultは、Laravelにフルテキスト検索機能を追加するパッケージ。

Laravel Scout – Laravel – The PHP Framework For Web Artisans
https://laravel.com/docs/5.4/scout

その検索エンジンにはデフォルトでAlgoliaが選ばれている。

Algolia | The Most Reliable Platform for Building Search
https://www.algolia.com/

AlgoliaはサーチAPIを提供する商用サービス。無償プランもあるけど、レコード上限は1万件、オペレーション上限は月間10万件に制限されている。自分が今やっている実験ではレコード件数がすでに6万件を超えているので無償プランは使えない。かといって、自腹で有償プランを契約できる予算は無い。

Laravel Scoutはドライバを書くことで異なる検索エンジンを接続できるようになっている。オープンソースのフルテキスト検索エンジンと言えばElasticSearch。調べてみると、Laravel ScoultのElastric Searchドライバがすでに存在した。

Laravel Scout Elasticsearch Driver
https://github.com/ErickTamayo/laravel-scout-elastic

セットアップ手順を説明している記事も見つかった。

Basic Search Functionality with ElasticSearch & Laravel Scout
https://medium.com/@samogorm/basic-search-functionality-with-elasticsearch-laravel-scout-6ac182c99cbf

この記事をなぞって、自分のLaravelプロジェクトにElasticSearch+Laravel Scoutによる全文検索機能を追加してみたい。いきなり本番サーバーに適用するのは怖いので、ローカルのHomestead(Ubuntu)で試してみる。

まずは以下の下準備を行う。

Prerequisites

  • Basic Knowledge of Laravel
  • You have Laravel 5.3 installed
  • The latest Java version is installed to your machine
  • You have installed ElasticSearch to your machine
  • You have ElasticSearch running a http://localhost:9200

Javaのインストール

Linuxmania:apt-getでJavaをインストールしよう (Ubuntu)
https://www.linuxmania.jp/apt-install-java.html

ElasticSearchのインストール

Installing Elasticsearch | Elasticsearch Reference [5.5] | Elastic
https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html

ElasticSearchが動いたので、Laravel Scoutの組み込みに続く。

[PHP] PhantomJSを使ってJavaScriptでレンダリングされるページをスクレイピングする

サーバーサイドでクローンを使っていくつかのサイトを定期的にスクレイピングしているのだけど、新たに追加するサイトがAngularJSで書かれているようで、file_get_contents関数などではHTMLを取得できないことがわかった。さてどうするか。

ヘッドレスブラウザのPhantomJSを使えば、JavaScriptでレンダリングされた結果のHTMLをサーバーサイドでも取得できそうだ。PHP PhantomJSというPHPのインタフェースも公開されているようなので、LaravelのCommandとして実装してみる。

PhantomJSのセットアップ

PhantomJS | PhantomJS
http://phantomjs.org/

Linux 64-bitをダウンロードして bin ディレクトリに格納。


動作確認

PHP PhantomJS

GitHub – jonnnnyw/php-phantomjs: Execute PhantomJS commands through PHP

コーディング

以下のサイトのサンプルを拝借してテスト。

PHP PhantomJS を使ってPHPでヘッドレスブラウジング | QUARTETCOM TECH BLOG
http://tech.quartetcom.co.jp/2016/04/07/php-phantomjs/


動いた。