PHP・Ruby・Perl等のスクリプト言語をサクっと書いてサクっと実行(EmEditor編)

皆さんは、プログラミング**以外**での用途では、テキストエディタ(以下**エディタ**と略します)として何をお使いでしょうか？

私の場合は仕事柄、プログラミングやサーバーといった世界とは無縁な方とのお付き合いもよくある関係で、Windowsでは**EmEditor**というエディタを10年以上愛用しています。

- EclipseやNetBeans等のIDEに比べ動作が非常に軽快
- 外部ツールと簡単に連携できる

という特徴があるため、スクリプト言語のメリットである、**「サクッと書いてサクっと実行」を最大限に活かす手段**としても活用しています。

--------------------------------------------------------------------------------

## EmEditorとは

- https://jp.emeditor.com/
	- 4,800円～の有料ソフトです。[^1]

[^1]: 私は永久ライセンスユーザーですが、永久ライセンスは4,000円前後で取得したような記憶があります。現在はかなり高額になっていて驚きました。

日本の有名なWindows用エディタでは、以下のようなソフトウェアに近いです。

- 秀丸エディタ
- サクラエディタ
- TeraPad

特に気に入っているのは、以下のようなケースでの利用です。

- スクリプト言語をすぐに実行できる(今回の本題)
	- 例：今行われている業務手順がいかに非効率かをその場ですぐに実証してみせる。
- 超巨大なファイルでも開ける
	- 例：サーバー知識のあまりない人から受け取ったG(ギガ)単位のログをすぐに開く。
- 強力なCSVモード
	- 例：事務仕事をしている人から受け取ったエクセルのデータをその場ですぐに解析する。

--------------------------------------------------------------------------------

## 設定方法

### 1.スクリプト言語のインストールパスを確認

使用するスクリプト言語のインストールパスを確認してください。※環境によって異なりますので、**以下はあくまでも一例**です。

- `C:\php\php.exe`
- `C:\ruby\bin\ruby`
- `C:\perl\bin\perl.exe`

[Windowsの環境変数「PATH」](https://www.google.co.jp/search?q=windows+%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0+PATH+%E8%A8%AD%E5%AE%9A&ie=utf-8&oe=utf-8)を設定している方であれば、その値を使用してもOKです。(この文章の意味が分からない人は、とりあえず気にしなくてもOKです。)

--------------------------------------------------------------------------------

### 2.EmEditorで外部ツールの設定

1. ツール ⇒ 外部ツール ⇒ 外部ツールの設定...
1. 外部ツールウインドウが開くので【新規作成】ボタンを押す
1. 以下のスクリーンショットを参考にしてください。(PHPの場合の例です)

![emeditor_config.png](https://qiita-image-store.s3.amazonaws.com/0/208275/3a03686c-7a52-fff6-2fa4-ce06ea5bd2ed.png)

1. タイトル：自分が分かれば何でもOK
<br><br>
2. コマンド：`C:\php\php.exe`
	- 手順1で調べたパスです。
<br><br>
3. 引数：`"$(Path)"` 
	- 2のコマンドへ、開いているファイルのパスを渡すという意味です。
<br><br>
4. 初期ディレクトリ：`$(Dir)`
	- 2のコマンドを、開いているファイルのあるディレクトリで実行するという意味です。
<br><br>
5. アイコンパス：任意(未入力でもOK)
	- 画像リソースを持つファイルへのパスを入力すると、アイコンを付ける事ができます。
	- 上記の例では、php.exeが保有しているリソースを使用しています。
<br><br>
6. ファイルを保存する：チェック
	- 実行時に自動でファイルを保存します。便利なのでONにすると良いです。
<br><br>
7. アウトプットバーを使用する：チェック
	- 出力結果が自動分割されたウインドウ(アウトプットバー)内へ表示されるようになります。とても便利なのでONにすると良いです。
<br><br>
8. アウトプットバーにフォーカスを設定する：任意
	- チェックすると、7の出力結果表示時にフォーカスがアウトプットバーへ移ります。
	- 私は出力結果をすぐにコピーする事が多いので、ONにしています。
<br><br>
9. 終了時に閉じる：チェックしない
	- チェックすると、実行後にアウトプットバーが閉じるようになりますが、あまりそういう使い方はしないと思います。
<br><br>
10. エンコード：アクティブな文章と同じ
	- 出力結果の文字コードを指定します。この設定にしておくと、自動でファイルと同じ文字コードで出力するようになります。
	- 異なる文字コードで出力したい場合は、設定を変更してください。
<br><br>
11. 標準エラー：任意
	- 標準エラーの出力先です。
	- 私は「ツールチップとして表示」するようにしていますが、不要であれば「破棄」でもOKです。

--------------------------------------------------------------------------------

### 3.キーボードショートカットを設定

このままでも使えるのですが、メニューやツールバーから呼び出すのは面倒なので、任意のショートカットキーを割り当てておくと便利です。

1. ツール ⇒ 現在の設定のプロパティ
1. プロパティウインドウが開くので、左メニューから「キーボード」を選択
1. 以下のスクリーンショットを参考にしてください。

![emeditor_keyboard.png](https://qiita-image-store.s3.amazonaws.com/0/208275/5a533633-c76e-615d-fe12-0c5272a167b0.png)

割り当てるキーは何でもOKです。※全てのショートカットキーをカスタマイズできます。

--------------------------------------------------------------------------------

### 4.実際に使ってみる

`C:\php\sample.php` というファイルを作成して実行してみます。

手順3で設定したショートカットキーを押すだけで、自動でファイルが保存され、アウトプットバーにファイルと同じ文字コード(今回はUTF-8)で出力結果が表示されます。

![emeditor_exec.png](https://qiita-image-store.s3.amazonaws.com/0/208275/627c9455-c748-8cd9-91ec-3e50c43e0dc6.png)

アウトプットバーに出力された結果は、Windowsコマンドプロンプトで…

```
> C:\php\php.exe "C:\php\sample.php"
```

…と入力した結果をUTF-8で出力したものと同じ という事になります。

--------------------------------------------------------------------------------

### 5.コマンドラインオプションを使いこなしてみる

- 各スクリプト言語のコマンドラインオプション
	- [PHP](http://php.net/manual/ja/features.commandline.options.php)
	- [Ruby](https://docs.ruby-lang.org/ja/latest/doc/spec=2frubycmd.html)
	- [Perl](http://perldoc.jp/docs/perl/5.8.4/perlrun.pod)

これらを使いこなすと、構文チェック等もできるようになります。

例えば、PHPファイルの構文チェックを行いたい場合、手順2の設定で…

- 引数：`"$(Path)"` ⇒ `-l "$(Path)"`

…のようにすると、ショートカットキーを押すだけで構文チェックができるようになります。上記の例は、Windowsコマンドプロンプトで…

```
> C:\php\php.exe -l "C:\php\sample.php"
```

…と入力した結果と同じという事になり、アウトプットバーに下記が出力されます。

```
No syntax errors detected in C:\php\sample.php
```

--------------------------------------------------------------------------------

## 実用例

### 結果さえ取得できれば書き方はどうでも良い時

チラシの裏へ殴り書きをするような感覚で書いて、即実行して結果を得ます。

- 例：[素敵なHTMLかつShift_JISで書かれたauのページ](https://www.au.com/ezfactory/tec/spec/ezsava_ip.html)からIPアドレスのリストを作りたい

```php
$html = file_get_contents('https://www.au.com/ezfactory/tec/spec/ezsava_ip.html');
$regex = '/\<div class\="TableText"\>.*?(\d{1,3}(?:\.\d{1,3}){3}).*?\<\/div\>.+?\<div class\="TableText"\>.*?(\/\d{2}).*?\<\/div\>/s';

preg_match_all($regex, $html, $match, PREG_SET_ORDER);

foreach ($match as $m) { echo $m[1], $m[2], "\n"; }
```

- 殴り書きの例です。**<font color="red">絶対にコピペで使わないでください。</font>**
- **<font color="red">正規表現もマネをしないでください。</font>**
	- HTMLの一部をコピペして[preg_quote()](http://php.net/manual/ja/function.preg-quote.php)に通し、機械的に生成しただけのものです。
- スクレイピングは、専用のライブラリを使用する or DOM操作するようにしましょう。

このような殴り書き専用のファイルを用意しておき、ランチャー等で呼び出しすぐに殴り書きできるようにしておくと、便利だと思います。


### Qiitaに掲載する短いコード

初心者向けに書いた短いコードは、IDEを使用する必要性がないので、全てEmEditorで書いています。

- [マルチバイト(全角スペース等)対応のtrim処理](https://qiita.com/fallout/items/a13cebb07015d421fde3)内の簡単なコード
- [エクセル方言のcsv(SJIS)を配列にする](https://qiita.com/fallout/items/0cf4d22c23a8a81ee216)内の簡単なコード
- [PHPのソースコードの難読化・暗号化](https://qiita.com/fallout/items/f3c3b9a5a3117908d303)内の復号処理
	- [PHPのパーサトークンの一覧](http://php.net/manual/ja/tokens.php)からトークンをリスト化したものを、スクレイピングでサクっと取ってきたりもしています。

このように、短いコードをサクっと実行してサクっと結果を見たい時は、IDEを起動するよりも素早く目的を果たせる事も多いと思います。

--------------------------------------------------------------------------------

## その他のアプリケーションとの連携

今回はスクリプト言語との連携方法を説明していますが、コマンドラインインターフェイスを提供しているアプリケーションであれば、同じ手順で連携が可能です。

例えば、[FFmpeg](https://www.ffmpeg.org/) を利用した動画ファイル変換を、ショートカットキーやツールバーのボタン一発で済ませてしまう…といった事もできるようになります。[他にも様々な活用方法があります](http://www.emeditor.org/ja/faq_tools_tools_external.html)ので、是非使いこなしてみてください。