日経ソフトウエアでPHPの連載を始めます

日経ソフトウエア2017年5月号

日経ソフトウエアの2017年5月号から、「PHPでサクサクWebアプリ開発」というタイトルの連載を始めます。

PHPの特徴は、環境構築が簡単で、プログラミング初心者でも始めやすいことです。一方で、やや古い情報が多かったり、イマイチなサンプルがネットに転がってたりするのが残念な点でもあります。

PHP 5.4以上ならビルトインサーバが使えるのでApache等のWebサーバを入れる必要はありません。また、Windows 10 Anniversary Update以降なら、XAMPPよりも簡単に、「本物」のLinux環境を整えることができます(macOSなら、そもそもPHPははじめからインストールされています)。そういった新しくて使いやすい環境をベースに、実用的なPHPプログラムを書く方法を紹介していきます。

毎号6ページ程度なので、多くを書くことはできないですが、要所は押さえているので、他の書籍で学び始める前のスタート地点にしていただければいいと思っています。


ちなみに、最近の機械学習ブームを受けてか、日経ソフトウエアも機械学習系の話題が多いです。今号(2017年5月号)では、Anacondaを使ったPythonプログラミングの学習、Python + OpenCVによる画像認識、Pythonによる金融データの分析と、Pythonの記事が山盛りにあります。

私もOpenCVを使う際などにPythonを使ったことはありますが、機械学習を本格的に触ったことはないので、日経ソフトウエアの記事から入門してみようと思ってます。

都道府県のリストを出力するWebアプリを作った

サイト: https://morning-refuge-95932.herokuapp.com/

ソース: https://github.com/ryo-utsunomiya/japanese-prefectures-api

なぜつくったのか

1つのページで色々なフォーマットに対応したものがほしかったから。

どうやってつくったのか

アプリを作って、無料でホスティングする方式で考えていたので、Herokuを念頭に置いてPHPで作った。
PHPアプリを無料で動かす場所としてはHerokuはとても便利。
ちなみに、一番ハマったのはTwigテンプレート内でビット演算を行う方法がわからなかったこと。

つくってみて思ったこと

生データをJavaScriptの中にベタ書きするようにすれば、PHP使う必要なかったような…。
そして、PHPを使わないならHerokuを使う必要もなく、無料で使える静的Webサイトホスティングなら他にも選択肢はありそう。

今後の展望

ひらがな読みのフィールドを追加したり、SQLのテーブル名を設定できるようにしたりと、データの充実化や生成機能の柔軟化を図りたい。

Todoistにタスクを一括登録するためのテンプレートを作るPHPスクリプト

タスク管理ツールのTodoistを愛用しています。本を買ったときなどに、章ごとにタスクを登録しておくと、読書の達成感が増すのでおすすめです。しかし、1冊につき10章とかあると、『○○ 第1章』『○○ 第2章』…みたいに登録していくのは面倒です。

そこで登場するのが、Todoistのテンプレート機能。これはプレミアム会員限定の機能ですが、CSVファイルを読み込んでタスクを登録することができます。

ということは、Todoistのテンプレートの形式に沿ったCSVを作るスクリプトを書けば、タスク登録を楽にできるはず…。ということで、書いてみました。

使い方は簡単で、$ php todoist_template_editor.php タスク名 繰り返し回数を実行するだけ。カレントディレクトリに、「タスク名.csv」というtodoistテンプレート形式のCSVが作成されます。

注意点として、CSVにはAuthorの情報が必要なので、この部分は各人が書き換えて使う必要があります。
上記スクリプトでは、↓のように書いてある、「’Utsunomiya (4971726)’」の部分を適宜置き換える必要があるということです。

自分のauthor情報を調べるには、既存プロジェクトのテンプレートをエクスポートするのが手っ取り早いと思います。

定型的なCSVを作るだけなので、エクセルでもよくない? って感じの機能ですが、エクセル起動するのダルいので…。

最後にTodoistのCSVインポート手順のスクリーンショットを貼っておきます。

  1. プロジェクトのメニューから「テンプレートからインポート」を選択

todoist_csv_import_1

  1. ダイアログが表示されるので、CSVファイルをドラッグ&ドロップ

todoist_csv_import_2

  1. CSVファイルに記載されたタスクが追加される

todoist_csv_import3

シーザー暗号を解くPHPスクリプト

暗号技術入門 第3版 秘密の国のアリス

『暗号技術入門』を読んでいたら、以下の練習問題がありました。

シーザー暗号で暗号化された、次の暗号文があなたの手に入りました。鍵(ずらしている文字数)はわかりません。この暗号を解読してください。
PELCGBENCUL

シーザー暗号なので手計算でも十分ですが、面倒くさいのでプログラムで解きます。

なお、ネタバレになってしまいますが、この暗号文の鍵は「13」なので、PHPのstr_rot13関数を使うと、1行で解けます。

Software Design2014年11月号で『VirtualBox+CentOSでローカル開発環境を構築する』という記事を書きました

Software Design (ソフトウェア デザイン) 2014年 11月号 [雑誌]

Software Design誌の2014年11月号の第1特集『無理なくはじめるInfrastructure as Code』にて、第2章「VirtualBox+CentOSでローカル開発環境を構築する」を、同僚(岡本さん)と共著で執筆しました。元々は岡本さんに来た執筆依頼だったのですが、ちょうど岡本さんが別件で忙しかったことから社内で別の著者を探してて、私が手を挙げた、という経緯があります。

記事については岡本さんが序文と監修を担当し、構築手順については私が書きました(構築手順の構成は、岡本さんがスクール用に執筆した教材を参考にしています)。記事の内容については、CentOSのイメージをダウンロードしてVirtualBoxにインストール、ということで、かなりクラシカルです。

私の場合、最近はローカル開発環境はVagrantで作ることが多く、本番環境はAWS/Azureのようなクラウドを使うのが普通なので、isoからOSをインストールするのは久しぶりでした。とはいえ、この記事を書いた直後に、仕事でisoからインストールして開発環境を作る機会があったので、やはりインストーラと向き合う経験は必要ですね。

なお、特集全体の構成としては、1章で全体を概観し、2章は開発環境をマニュアルで作成、そこから3章のシェルスクリプト、4章のAnsible、5章ではDockerを使用したLAMP環境の構築へと進みます。Infrastructure as Codeという意味では、3章〜5章がメインといってよいでしょう(6章はAzure、7章がまとめ)。LAMP(Linux+Apache+MySQL+PHP)環境でWebアプリケーションを開発している方には参考になる部分が多いと思います。

ちなみに、記事執筆に際して一番苦労したのは、Windowsの操作だったりします。普段はMacで開発してるのですが、今回は「ホストOSはWindows7で」という注文があったので、会社のWindows PCを借りて構築手順を作りました。正直、VirtualBox使うならWindowsよりMacの方が楽だと思います。VirtualBoxのWindows対応がイマイチだったり、Windows PCによっては仮想化機能が無効になっていることがあったりと(BIOSの設定変更が必要)、色々と苦労が多いので。。。