LoginSignup
4
2

Laravel SailでMeCabを使いたくなったので、動くようにしてみた。

Last updated at Posted at 2023-06-05

はじめに

Laravelはお好きですか?
なんだかんだ結構使っているわけですが、ふとしたことから久々にMeCabを使う必要が出てきたので、普段の開発で使っているSail環境でMeCabを使うにあたって、いろいろいじってみたので、備忘録として書いてみようかと思いました。

やったこと

とりあえずLaravel Sail環境を作る

お決まりのあれ。

bash
composer create-project laravel/laravel mecab
cd mecab
composer require laravel/sail --dev
php artisan sail:install

Sailのdocker関連ファイルを書き出す

こんな感じで設定ファイルを書き出す。
以降は書き出されたファイルだけ編集する。

bash
php artisan sail:publish

appコンテナのDockerfileを編集

何はともあれ、MeCab関連をインストール。

./docker/8.2/Dockerfile
RUN apt-get update\
    ~(中略)~
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# ここから追加
RUN apt-get update\
    && apt-get install -y mecab libmecab-dev mecab-ipadic-utf8\
    && apt-get clean\
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

おまけにmecab-ipadic-NEologdも入れたい

辞書がイケてないと、求めた状態にならないので、イケてる辞書を入れたい方はこちらも。
https://github.com/neologd/mecab-ipadic-neologd
新語にやたら強かったりして、これがないと色々辛いと思っている・・・。

./docker/8.2/Dockerfile
RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail

# ここから追加
RUN cd /home/sail\
    && git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git\
    && ./mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n --asuser -a -y -p /home/sail/dic\
    && cd ..\
    && rm -rf mecab-ipadic-neologd

ユーザーが作られた後にやるのがミソ。
インストールのオプションは色々あるけど、今回は全部盛りのために-aをつけてます。
正直、-aはなくても良いかも。用途次第でよしなにどうぞ。

sailを起動

PATH通してあるので、そのまま打てるけど、通してない方はドキュメントをどうぞ。

こんな感じでバックグラウンド起動。

bash
sail up -d

辞書のダウンロードやら何やらに時間がかかかるはず。
お茶でも飲んで待ちましょう。

とりあえず使ってみる

今回、php-mecabを使っていないのです。
permission deniedにいじめられすぎて、ちょっと折れました。
あと、権限まわりの設定色々追加しすぎると、元のSailからかけ離れるのも嫌だったのも言い訳にしたい・・・。

とりあえず今回はこちらのお世話に。

composer.json
    "require": {
        "youaoi/php-mecab": "dev-master"
    },
bash
sail composer update

としておけば良いでしょう。

動けば良いのである

route/web.php
use Youaoi\MeCab\MeCab;

# 今回の手順でmecab-ipadic-NEologdを入れた場合はこれを追加。
# .envに書くとかすると、本番と開発で分けられたりして良いと思う。
MeCab::setDefaults([
    'dictionaryDir' => '/home/sail/dic',
]);

Route::get('/', function () {
    $mecab = new MeCab();
    $text = "吾輩わがはいは猫である。名前はまだ無い。";
    dd($mecab->parse($text));
});

もう何も考えず、ルーティング直。動くかどうか見るだけだし。
localhostにアクセスして、、、
スクリーンショット 2023-06-05 20.38.41.png
こんな感じで表示できたら動いてる。ってことで。
あとはcontrollerから使うなりなんなりできるはず。

さいごに

ほ、本当にこれでいいのだろうか・・・。
もっといい方法ありそうなんだよなあ。と思っています。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2