Laravelプロジェクト下どこからでもArtisan実行

タグ: Laravel   Bash   Zsh  

BashでArtisanコマンドの補完を実現する、ArtisanBashCompletionを改良して、ArtisanコマンドをLaravelプロジェクト下のどのフォルダーにいても実行と補完ができるようにしました。

この補完を使用しない方でも、ArtisanコマンドをLaravelプロジェクトのどこからでも実行できるようにするのは、簡単です。今回はBashを使用している方のコードですが、他のシェルでも似たような方法で実現できます。(zshでも動作するようです。)

.bashrc.bash_profileファイルに以下のコードを追加してください。(zshの場合は.zshrcなどに置き換えて読んでください。)

alias artisan='php "$(_get_artisan_dir)/artisan" --ansi'

_get_artisan_dir()
{
    wd=$(pwd)

    until [ -f "${wd}/artisan" ]
    do
        wd=${wd%/*}
        if [ -z $wd ]
        then
            break
        fi
    done

    echo $wd
}

これでartisanというエイリアスがLaravelプロジェクト下のどのフォルダーからでも実行できます。

もちろん、BashArtisanCompletionを利用している方は、新しいバージョンに入れ替えていただけば、補完と実行ができます。

追記:Tips

Artisan用に組んでありましたが、汎用的に変更することも可能です。

_command_search_dirs()
{
    wd=$(pwd)

    until [ -f "${wd}/$1" ]
    do
        wd=${wd%/*}
        if [ -z $wd ]
        then
            break
        fi
    done

    echo $wd
}

とすれば、引数に探したいファイルが指定できるようになります。エイリアスでこれを利用するなら:

alias artisan='php "$(_get_artisan_dir artisan)/artisan" --ansi'

ですかね。試していませんけれど。

PHPでコマンドラインからファイルを実行する場合、このような形式になるので、汎用的に使えるでしょう。

まあ、zshであれば別の方法もありそうです。