Bash on Ubuntu on Windows に PHP をインストールして Slack API を送信する

Windows 10 Insider Preview Build 14316 で提供されている Bash on Ubuntu on Windows では、デフォルトで PerlPython が利用できます。デフォルトで PHP は利用できませんが、apt-getでインストールすることができます。今回は Bash on Ubuntu on WindowsPHP をインストールし、Slack API (Incoming Webhooks) を送信してみます。

なお、Bash on Ubuntu on Windows 自体のインストール方法は以下の記事を参照してください。 docs.hatenablog.jp

まず、Bash on Ubuntu on Windows を起動して次のコマンドを実行し、PHP をインストールします。

apt-get install php5-cli php5-curl

Bash on Ubuntu on Windows では、WindowsのCドライブは/mnt/c/ディレクトリとして参照できます。今回はCドライブの下にonUbuntuフォルダを作成し、そこにslack.phpというファイルを作成して以下のようなコードを書いて保存します。このファイルは vi で作成しても構いませんし、Windows 付属のメモ帳や使い慣れたテキストエディタで作成できるのも Bash on Ubuntu on Windows のメリットです。

<?php
// Slackの[Webhook URL]欄に表示されているURL
$webhook_url = 'https://hooks.slack.com/services/xxxxx';

// Slackに投稿するメッセージ
$msg = array(
    'username' => 'Slackテスト', 
    'text' => 'Hello, Slack Incoming WebHooks.'
);
$msg = json_encode($msg);
$msg = 'payload=' . urlencode($msg);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $webhook_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $msg);
curl_exec($ch);
curl_close($ch);

ファイルを作成したら次のコマンドを実行することで Slack にメッセージが投稿されます。

php /mnt/c/onUbuntu/slack.php

なお、Slack API について(特に「Webhook URL」の取得方法)は以下の記事を参照してください。 docs.hatenablog.jp

パーフェクトPHP

パーフェクトPHP

Windows 10 の Bash on Ubuntu on Windows をインストールしてRubyでHello, World.

Microsoft社は開発者向けカンファレンス「BUILD 2016」にて、2016年夏の Windows 10 の大型アップデート(Windows 10 Anniversary Update)で Bash を搭載することを発表しました。そしてその後公開した Windows 10 Insider Preview Build 14316(以下 Build 14316)では早くも Windows Subsystems for Linux ベータ版を提供して Bash on Ubuntu on Windows が実行できるようになっています。ここでは Build 14316 で Bash on Ubuntu on Windows をインストールして実行するまでの手順を説明します。なお、Build 14316 にアップデートするためにはスタートメニューの[設定]-[更新とセキュリティ]の[開発者向け]で[開発者モード]を選択し、[Windows Update]-[詳細オプション]でInsiderのレベルを[ファースト]に設定する必要があります。

まず、Build 14316 のスタートメニューから[すべてのアプリ]-[Windows システム ツール]-[コントロール パネル]を開き、[プログラム]-[Windows の機能の有効化または無効化]で[Windows Subsystem for Linux (Beta)]にチェックを入れて再起動します。 f:id:hontonodeai:20160410172429p:plain

再起動後、スタートメニューから[すべてのアプリ]-[Windows システム ツール]-[コマンド プロンプト]を実行し、bashと入力します。Type "y" to continue:と表示されるので、yを入力するとインストールが進みます。 f:id:hontonodeai:20160410172839p:plain

インストールが完了すると、プロンプトが>から#へ変わります。 f:id:hontonodeai:20160410173346p:plain

また、スタートメニューに[Bash on Ubuntu on Windows]が追加されています。 f:id:hontonodeai:20160410173828p:plain

これで Bash on Ubuntu on Windows を実行する環境が整いました。さっそくスタートメニューの[Bash on Ubuntu on Windows]を実行して、いくつかのコマンドを試してみます。/以下にはLinuxではおなじみのディレクトリが並んでいます。また、/mnt以下には Windows のCドライブがあります。 f:id:hontonodeai:20160410174203p:plain

デフォルトでsshも実行できます。 f:id:hontonodeai:20160410175434p:plain

デフォルトでperlpythonも実行できます。 f:id:hontonodeai:20160410175701p:plain

デフォルトでrubyは入っていませんが、Ubuntuでおなじみのapt-getが入っているので、apt-get install rubyでインストールすることができます。 f:id:hontonodeai:20160410182804p:plain

このように、ベータ版ながら、デフォルトでもLinuxUbuntu)のコマンドがシームレスに、軽快に動作し、apt-getでソフトウェアを追加できることが確認できました。今から Windows 10 Anniversary Update が楽しみです。

たのしいRuby 第5版

たのしいRuby 第5版

最近のブラウザの JavaScript では class 構文が動く

Firefox 45 正式版がリリースされたことにより、FirefoxGoogle ChromeMicrosoft Edge では、デフォルトで JavaScript の class 構文がサポートされるようになりました。つまり、他のプログラミング言語でも馴染みのあるクラスを用いたオブジェクト指向プログラミングが可能となります。

class Browser {
    constructor(name) {
        this.name = name;
    }

    greet() {
        console.log('Hello, ' + this.name);
    }
}

var edge = new Browser('Edge');
edge.greet();    // Hello, Edge

var chrome = new Browser('Chrome');
chrome.greet();  // Hello, Chrome

var firefox = new Browser('Firefox');
firefox.greet(); // Hello, Firefox

クラスの継承もサポートします。

class LegacyBrowser extends Browser {
    greet() {
        console.log('Good bye, ' + this.name);
    }
}

var ie = new LegacyBrowser('IE');
ie.greet();    // Good bye, IE

なお、今まではプロトタイプを用いた次のようなコードでオブジェクト指向プログラミングを実現していました。

var Browser = (function () {
    function Browser(name) {
        this.name = name;
    }
    Browser.prototype.greet = function () {
        console.log('Hello, ' + this.name);
    };
    return Browser;
}());

var edge = new Browser('Edge');
edge.greet();    // Hello, Edge

var chrome = new Browser('Chrome');
chrome.greet();  // Hello, Chrome

var firefox = new Browser('Firefox');
firefox.greet(); // Hello, Firefox

JavaScript 第6版

JavaScript 第6版

オープンソース化された Swift を Ubuntu で実行する

Apple 社が開発したプログラミング言語 Swiftオープンソース化されました。Swift.org というサイトが公開されており、ソースコードGitHub で管理されています。

Swift はこれまで主に Apple 社の OS XiOS 用のソフトウェアを開発するためのプログラミング言語として知られてきましたが、今回のオープンソース化によって Linux 用の開発ツールも提供されました。そこで、公式サイトで提供されている Ubuntu 用の開発ツールを使用してみます。サポートされているのは Ubuntu 14.04 または 15.10 です。バイナリファイルが用意されているので非常に簡単です。

まず、Swift の実行に必要なソフトウェアをインストールしておきます。

$ sudo apt-get install clang libicu-dev

次に、Swift.org から Ubuntu 用の開発ツールをダウンロードして展開します。今回は Ubuntu 14.04 版をダウンロードしました。

$ wget https://swift.org/builds/ubuntu1404/swift-2.2-SNAPSHOT-2015-12-01-b/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz
$ tar xzf swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz

最後に、展開したディレクトリ内の usr/binPATH に追加します。

$ export PATH=/自分の環境に合わせて適切なパスを書く/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/bin:"${PATH}"

これで swift コマンドが利用できるようになりました。

$ swift -version
Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c)
Target: x86_64-unknown-linux-gnu

それでは、簡単なプログラムを書いて実行してみます。以下のコードを hello.swift というファイル名で保存します。

print("Hello, Swift.")

以下のコマンドを実行すると結果が出力されます。

$ swift hello.swift
Hello, Swift.

もちろん、Swiftコンパイルして実行可能ファイルを生成することもできます。デフォルトでパッケージマネージャの仕組みが用意されているため、それに則って実行してみます。

まず、パッケージ用のディレクトリを作成します。ここでは Hello ディレクトリを作成します。

$ mkdir Hello
$ cd Hello

次に、マニフェストファイル Package.swift を作成します。デフォルトの設定では空のファイルで構いません。

$ touch Package.swift

ソースファイルを作成します。デフォルトでは Sources ディレクトリの main.swift というファイルから実行されます。

$ mkdir Sources

ここではソースファイル main.swift に次のようなコードを追加します。

print("Hello, Swift.")

ディレクトリ構成は以下のようになります。

Hello/
├── Package.swift
└── Sources
    └── main.swift

ソースファイルをビルドするには以下のコマンドを実行します。

$ swift build
Compiling Swift Module 'Hello' (1 sources)
Linking Executable:  .build/debug/Hello

ビルドが成功すると、.build ディレクトリに実行可能ファイルが生成されます。

$ .build/debug/Hello
Hello, Swift.

なお、デフォルトではデバッグ版が生成されます。リリース版をビルドするには -c release オプションを追加して実行します。

$ swift build -c release
Compiling Swift Module 'Hello' (1 sources)
Linking Executable:  .build/release/Hello

詳解 Swift 改訂版

詳解 Swift 改訂版

PHP 7 正式版をソースファイルからインストールして試してみる

何回かの延期を経て、ついに PHP 7 正式版がリリースされました。

http://php.net/archive/2015.php#id2015-12-03-1

PHP 7 は久々のメジャーバージョンアップであり、処理速度の大幅な向上が期待されるほか、新機能も追加されています。さっそくソースファイルからインストールして試してみます。

なお、ここではWebサーバなどは使わず、単純にコマンドラインで実行を確認します。OS は VirtualBox 上の Ubuntu Server 14.04.3 LTS を使用し、必要なソフトウェアは、都度 sudo apt-get install でインストールしています。(例えば sudo apt-get install clang libxml2-dev など)

まず、PHP 7 のソースファイルを取得します。

$ wget http://jp2.php.net/get/php-7.0.0.tar.gz/from/this/mirror -O php-7.0.0.tar.gz

ダウンロードしたファイルを展開し、展開したディレクトリに移動します。

$ tar zxvf php-7.0.0.tar.gz
$ cd php-7.0.0

ソースファイルからビルドします。今回は試すだけなので ./configure のオプションには特に何も指定していません。

$ ./configure
$ make
$ make test
$ sudo make install

インストールに成功すると php コマンドが利用できるようになります。

$ php -v
PHP 7.0.0 (cli) (built: Dec  4 2015 15:39:25) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies

では、試しに PHP 7 の新機能である無名クラスを利用してみます。以下のコードを sample.php というファイル名で保存します。

<?php
(new class {
    public function greet() {
        echo "Hello, PHP 7.\n";
    }
})->greet();

以下のコマンドを実行します。成功すると Hello, PHP 7. と出力されます。

$ php sample.php
Hello, PHP 7.

他の新機能や、PHP 5.6 から PHP 7 への移行ガイドなどは公式のドキュメントに詳細が記載されています。

PHP: PHP 5.6.x から PHP 7.0.x への移行 - Manual

パーフェクトPHP (PERFECT SERIES 3)

パーフェクトPHP (PERFECT SERIES 3)

docs.hatenablog.jp

PHP 7 リリース予定日(2015年12月3日)

PHP 7の正式版リリースが2015年11月12日から2015年11月26日に延期されましたが、2015年11月26日にはさらにRC8がリリースされました。

http://php.net/archive/2015.php#id2015-11-26-1

This release candidate prepares the short jump to the RTM. If no major issues appear, the 7.0.0 general availability (GA) release will be brought out on December 3rd.

大きな問題が見つからなければ、正式版リリースは2015年12月3日に予定されています。

今回のRC8では11件のバグが修正されています。

https://github.com/php/php-src/blob/php-7.0.0RC8/NEWS

docs.hatenablog.jp

Slack API (Incoming Webhooks) が簡単すぎた

Slack はビジネスなどでも使われているチャットツールですが、ただチャットしているだけでは Skype や LINE でグループチャットしているのと同じようなものです。Slack が真価を発揮するのは、API を利用して簡単に外部と連携できることでしょう。ここでは Slack API の中でも Incoming Webhooks を利用して、外部から Slack へ投稿する例を説明します。

まず、以下の手順で Webhook URL を取得します。

  1. Slackにログインして、左側のメニューから [Menu]-[Integrations] を選択します。 f:id:hontonodeai:20151122230302p:plain
  2. [Configured Integrations]-[Incoming WebHooks]-[Add]ボタンを押して Incoming Webhook を追加します。 f:id:hontonodeai:20151122230326p:plain
  3. [Webhook URL] 欄に今回利用するURLが表示されています。 f:id:hontonodeai:20151122230339p:plain

あとは Webhook URL に対してJSON形式のメッセージをPOSTするだけです。

<?php
// [Webhook URL]欄に表示されているURL
$webhook_url = 'https://hooks.slack.com/services/xxxxx';

// Slackに投稿するメッセージ
$msg = array(
    'username' => 'Slackテスト', 
    'text' => 'Hello, Slack Incoming WebHooks.'
);
$msg = json_encode($msg);
$msg = 'payload=' . urlencode($msg);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $webhook_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $msg);
curl_exec($ch);
curl_close($ch);

Slackに次のように投稿されると成功です。

f:id:hontonodeai:20151122232206p:plain

Incoming Webhooks では usernametext の他にもアイコンを指定するプロパティなどが用意されています。詳細は公式ドキュメントを参照してください。

https://api.slack.com/incoming-webhooks