Mac開発イメージ by pixabay

かなり昔(2011年8月)の当ブログ記事(開発者 or ITに詳しい人がMacを選ぶ10の理由 | Lunarian's Blog)ですが、いちおう当ブログ内では一番アクセスがあるようです。放置していてほとんど忘れていたのですが、ちょいちょい「Mac別に安くねーだろ」などのツッコミが入っています。

2011年当時の記事なので、今言われても困るなぁと思いつつ、開発環境など時代も変わってきたので、ここでひとつ2016年版をまとめてみようと思いキーボードを叩き始めた次第です。

その前に1:価格について

2011年当時、Macは割と安かったと記憶しています。まあ、もちろん最安値で探すならWindowsが選択肢になったでしょうが、同スペックや同フォームファクターで比較するならMacに価格優位性がありました。
ただ、現在では特にIntelのプラットフォームが進化し、性能が良く、かつ軽量・長寿命なノートPCがWindows搭載PCでも散見されますし、Macに価格優位性があるとは言えなくなりました。

その前に2:Windowsについて

Windows自体が気に入らなくてもデスクトップLinuxが十分実用的ですから入れ替えてしまえば良いですし、Windows自体も開発環境として逆にMacに対して優位性を持ってきています。MicrosoftがXamariinを買収し、ほとんどのプラットフォーム向けの開発が出来るようになっており、また次期大型アップデートにて、Bash on Ubuntu on Windowsが搭載される(Windows 10次期バージョンに搭載:米マイクロソフトがBash on Windowsを発表、その目的は – @IT)ということもあります。
そんなわけで、むしろWindowsを選ぶ、という方も増えてきています。なお、MicrosoftとOSS界隈についての最近の空気感: 「マイクロソフトを嫌っていたのではない、われわれが嫌われていたのだ」――Rubyまつもとゆきひろ氏が語る、MSの壁 – ITmedia ニュース

 ※ただし、iOSについてはビルド・署名にやはりMacが必要: Windows だけで Xamarin.iOS 開発をするには – Xamarin 日本語情報

では、Macを選ぶ理由は、

そんなわけで、開発者だからみんなMacというわけでもなくなってきたかな?というところなのですが、2011年の記事にならって、Macを選ぶ理由を挙げてみたいと思います。

理由1:美しい

まぁ、主観的になるので賛否両論ありそうですが、ハードウェアの外観・シンプルさに加えてOSの設計であったり、フォントレンダリング部分が美しいと感じます。とくにRetinaディスプレイは大抵のWindows PCよりも美しくフォントレンダリングされます。Windowsも8.1から高DPI対応などしていますが、アプリケーションの対応状況など含めまだまだな感じがします。

理由2:BSDベースである

BSDベースであり、Terminalで普通にBashなどが利用できます。またCUIベースでOSの設定も弄れますし、アプリケーションのインストールも可能なので、Macを購入して最初の設定や使うアプリケーションのインストールをシェルスクリプト+Ansibleであらかた済ませてしまうことも出来ます。

バージョンはアレなものの、デフォルトでRubyやPHP、Pythonなども入っていますし、なにかやろうとしてMacだから困るということがあまり無いかなという感じがします。

また枯れたベースであるから安定しているように思う。自由度が無いから安定しているのではないかというコメントがあったのだけど、開発環境として自由度と安定度なら安定度をとるだろうし、社内で使うなら、自由度はマイナスになる可能性がある。個人的にはWindowsが自由でMacが自由じゃ無いというのはよく分からない。自由がほしければ、デスクトップLinuxを使う。安定もしてるし。

理由3:アップデートにおける連続性

ここらへんもやや主観的だけれども、Windowsを使っててイラッとするのが、アップデートで操作性が大きく変わったり、アップデートをキャンセルしたつもりが強行されたり、作業中なのにアップデートしましょうみたいなダイアログがアクティブになって、作業を阻害するところ。特にWindows 7の時に酷かった。Windows 10でも少しは良くなったものの、やはり作業を邪魔したがるところがある。OSとしてそれはどうかというところ。

Macは良くも悪くもベースが変わらず、また通知もGrowl的な通知がされるだけで作業をとりあえずは阻害しない。

理由4:Macで困らなくなってきた&開発環境として優秀

elTAXとか除いて、Macでも使える…というか、クラウドベースのアプリケーションが増えブラウザさえあれば、業務が回る会社も多くなってきており、また何か新しいアプリケーションやサービスがでてもMac版が提供されるのが当たり前になっているので、もうあまりMac一本で困らなくなってきた。まぁ、ただこれは会社にもよるとは思うけど。

MS OfficeもWeb版があるし、Mac版も2016が提供されており、会計ソフトも、freeeやMFクラウド会計、弥生会計ネットワーク版などブラウザさえあれば使えるものが出てきました。

開発環境としても、上述のようにWindowsも追随してきていますが、iOSアプリの開発が1から10まで出来るのは、やはりMacですし、その他のプラットフォーム向けの開発も可能です。
また、IDEやエディタ、その他開発に必要な主要なアプリケーションは、Macで普通に動きますので、困ることがほとんどありません。(Visual Studio系、C#、.NET系、ゲーム開発などはWindowsの方がよさそうですが。)

Windows向けデスクトップアプリもElectronなどありますし、場合によりますが、なんとかなるかと思います。

理由5:開発者っぽい

特にノートPCについては、それぞれのブランドでイメージがあり、Let’s noteやThinkPadは、ビジネスマンという感じがしたりします。Mac、とくにMacbookは開発者やITギークっぽさがあり、開発者ぶれるところがある気がします。スタバとセットで、ウザく思われるかたもいる気がしますが。

まとめ

こんなところでしょうか。選ばない理由も人により様々あるかと思います。別にMacが最高と言っているわけではなく、選ぶ理由は上記のような感じかなというところです。

FuelPHPロゴ

職業プログラマではないのですが、仕事でPHPを用いたシステムをいくつか常用しており、フレームワークとしてFuelPHPを利用しています。そこらへんは以前のエントリ(→PHPフレームワーク「FuelPHP」について。CakePHPユーザーからの感想 | Lunarian's Blog)にて記載しています。

その際に紹介した書籍が2つあったのですが、うち1つの改訂版が出るという点と、もうひとつ電子書籍のみだったものが紙の書籍になって出ました。

私はどちらも旧版しか読んでないので、下記はそのときの印象についての記述です。

電子書籍で出ていたものです。電子書籍なのに改訂が有料かつ分冊化というのがよく分からない感じだったのですが、このたび紙の書籍化でそういうのも吹っ飛びました。
FuelPHPについてだけでなく、ユニットテストなどのモダン開発の視点からも記載があり、コード例が豊富で最初のころはとても助けられました。モダン開発の視点からもFuelPHPというフレームワークは便利なのだとわかります。
FuelPHPに関する代表的な書籍です。

装丁が変わっていたので分かりづらいのですが、FuelPHPに関するもう一つの代表的な書籍です。旧版は、右画像のような装丁です。

わかりやすく、必要十分に、そんなに深くまでは行かないという感じです。とはいえ、もう一つの書籍とはコード例の書き方が違うので、いろいろな書き方を見るという点で良いと思います。

FuelPHPは、フォームの書き方がformクラス+Validationクラスの書き方も、それらが一緒くたになったFieldsetクラスを使った書き方もあり、そのどちらにもメリット・デメリットがあるので、いろいろなフォームコード例を見るとそれらが立体的に見えてくると思います。
(その後で、Viewformプラグインとか使うとわかりやすい気がします:fuelphpのfieldsetがもったいないので拡張してみた | エンジニア開発記

お金に糸目をつけない人は、両方買うのがおすすめです。どっちか一つとなると甲乙つけがたい気がするのですが、あとは初心者よりなら改訂 FuelPHP入門、それなりにPHPもフレームワークもやったぜ寄りな人は、はじめてのフレームワークとしてのFuelPHP 改訂版という印象です。両方とも紙の書籍なので、本屋で読み比べるのが一番ですけどね。

最近のFuelPHPについて

相変わらず国内ではそれなりに人気があり、国外では下火という流れです。以前からの既定路線ですね。そして、これも既定路線ですが、PHPフレームワークの「Laravel」(ららべる)が国外で盛り上がりを継続し、それが国内にも進んできているように思えます。かくいう私も今の開発が一段落したらLaravelを勉強しようとたまにドキュメントを見ていたりします。印象として、Laravelは、シンプルで美しく固い菊人形のような印象を受けました。FuelPHPも綺麗ですが、もうちょっと庶民的な印象です。

とはいえ、正直Webアプリは、Javascriptによるアプリ、HTML5アプリといった方がよいのかよくわかってないのですが、JSによるステートフルな、ワンページアプリケーションが良いのでは無いかと思い始めています。私が作っているシステムは小規模オフィス用のCMSだったり、他の会社との協業ツールで、完全にJSアプリでだいたい出来るのでは無いかと思っています。

AngularJS、Backbone.jsなどのJSフレームワークも発展し、PHPはサーバー側でREST対応で良いかなという感じですらあります。そういう意味で言うとFuelPHPは最適といえるフレームワークですし、Laravelをあえて勉強する意味はそんなには無いのかなと言う気もしています。

まだ自分はモダンな開発手法、よりMVCを徹底して、DRYな開発が出来ているかというとまだまだなので、今の開発ではそれらを実践して、一つ一つ積み重ねています。その後で、Laravelなり、AngularJSなりに手を出したいなと思っています。

以前、FuelPHPでphpwordを使ってワードファイル(docx)を出力できるようにした時のメモ | Lunarian's Blogというエントリーをあげたのですが、その後、私が利用したphpwordをforkして進化したと思われるphpoffice/phpwordを発見しました(Github: PHPOffice/PHPWord · GitHub)。日本語に対応し、Pakagistにも登録(該当ページ:phpoffice/phpword – Packagist)があり、使い方は同じっぽいのでこちらを利用する方法に変更します。以下、使い方を簡単にメモ。

fuelPHPへの導入方法− composerをつかう

fuelPHPは、バージョン1.6からパッケージ管理にcomposerが利用されています。(composer公式サイト:Composer
phpoffice/phpword – Packagistがありますので、composerで導入することができます。

composer.json(composer.pharと同一フォルダにある)のrequire部分に、下記記載を追記。

あとは、ターミナル(黒い画面)で

で導入されます。phpwordは、ルートのvendorファイル下に配置され、class PHPWordにパスが通ります(という言い方が正しいかよくわからないけど、オートロードされるということ)。従って、普通に「new $phpword = new \PhpOffice\PhpWord\PhpWord();」でインスタンス生成で、利用できます。

使い方

※createWrite部分で誤りがあったため修正(2014/6/12)

↓こんな感じになります。
生成したワードファイル

参考リンク

FuelPHPとPHPWordのイメージ
【追記:2014/4/21】
以下で利用しているphpwordよりも新しいphpwordパッケージが見つかりました。そちらの方を利用する方が幸せになれると思いますので、コチラのエントリ:FuelPHPでphpoffice/phpwordを利用するメモ | Lunarian's Blogをご参照下さい。

職場で、簡単な業務用のアプリをFuelPHPで作っています。業務用アプリということで、文章を出力する機能が必要となり、PDF出力を利用していました。これについては、FuelPHP用にfuelpdfというパッケージ(fuel-packages/fuel-pdf · GitHub)があり、実装は簡単です。PDF出力ライブラリとしてTCPDFが利用されており、以前利用していたので簡単に実装できました。

ただ、どうしても取引先がMicrosoft Wordのファイルが良いという要望があり、こっちもそのためにWordを起動して手動でドキュメントを作る手間が馬鹿に出来なかったので、phpwordというPHPでMicrosoft Wordファイルを出力するPHPのライブラリをfuelPHPで利用できるようにしたまで奮闘した成果メモを記しておきます。

FuelPHPのパッケージへの理解、autoloadへの理解、フォルダ構成への理解などが不十分で結構とまどいましたが、とても簡単にできました。

phpwordの概要

生成できるのはWord2007形式

phpwordは、オープンソースのライブラリで、PHPでMicrosoft wordのファイルを出力するためのものです。
wordのファイルは、2003までの形式(*.doc)と2007移行の形式(*.docx)で中身が異なり、phpwordで出力できるのは、2007移行の形式(*.docx)になります。
なぜか2007移行の形式(*.docx)を毛嫌いしている人がたまに見受けられるのですが、Microsoft Office 2003は、XPのサポート終了と同時にサポートを終了してたりしますし、phpから2003までのword形式(バイナリファイル)を出力するのはかなり大変なので、そこはあきらめてほしいです。

生成方法は2通り

phpwordは、2つの方法でwordファイルを出力できます。
1つ目は、ワードファイルをテンプレートとして別途用意し、それを読み込んで編集(値を入れ替える)形で出力する方法。
2つ目は、一からワードファイルを生成する方法です。専用のオブジェクトを生成し、そのオブジェクトに一つ一つパーツを入れていき、最後に一つのワードファイルに生成します。

両方法のメリット・デメリット

1つ目は、ワードファイルをワードで編集して作っておくことが出来るなどのメリットがありますが、値を入れ替えるための変数の入力時などに若干面倒があります。また、プログラムの変更時にPHPとワードファイルと2つのソースを編集する必要があります。

2つ目の方法は、TCPDFなどでのやり方と同じなので慣れている人には楽です。またPHPで柔軟にドキュメント内容を変更できます。

私は2つ目の方法で主に利用するのですが、パスワード付きのドキュメントを取引先に指定されているので、その場合には、パスワードが付いたワードファイルのテンプレートを読み込むという形で1つめの方法で生成しています。(パスワードは固定なのでこの点ではそんなに手間はありません。セキュリティをそこまで厳密にする必要が無くて助かりました。phpwordには一からパスワード付きのファイルを生成する機能は無いようなので。)

phpwordの問題点:日本語への対応

問題として日本語への対応がされていないことが上げられます。
与えられた値に対して、PHP関数の「utf8_encode()」を適用してしまい、似非utf8でエンコードされてしまい文字化けする問題があります。これを手動で外す必要があります。
utf8_encode()という関数の名称から問題なさそうに思えるのですが、どうもちゃんとしたutf8にエンコードしてくれるわけではないとのことです。

fuelPHPへの導入方法その1− composerをつかう

(こちらの方法は、日本語対応で問題があるため、私は使っていません。)

fuelPHPは、バージョン1.6からパッケージ管理にcomposerが利用されています。(composer公式サイト:Composer
Packagistに、phpwordがありますので、composerで導入することができます。

composer.json(composer.pharと同一フォルダにある)のrequire部分に、下記記載を追記。

イメージ:
composer.jsonに追記する

あとは、ターミナル(黒い画面)で

ターミナル上でcomposer.phar updateする

で導入されます。phpwordは、ルートのvendorファイル下に配置され、class PHPWordにパスが通ります(という言い方が正しいかよくわからないけど、オートロードされるということ)。従って、普通に「new ¥PHPWord」でインスタンス生成で、利用できます。

この方法がオフィシャルな感じで一番正しい導入方法と思いますが、上述の日本語対応の問題を手動で修正しても「composer.phar update」時に新バージョンで上書きされてしまい、そのたびに修正しなければいけないのでは無いかと思います。(masterブランチしかないので)

そこで以下の方法でパッケージ化(というほどでもないけど)しました。

ちなみに、phpwordをforkしてutf8_encode()部分を消して、packagistに登録して、それでcomposerで導入という方法もありますが、めんどいのと、いろいろとアレなので私はやりません。

FuelPHPへの導入方法その2− packageにしてみる

fuelwordというそれっぽい名前でパッケージ化してみました。
なお、導入方法1と両方やった場合でどういつ名称だとcomposer導入の方が優先されるかと思います。

パッケージの構成と位置

fuel
├app
├core
├vendor
└packages
  └fuelword
    ├classes
     └fuelword.php
    ├config
    ├bootstrap.php
    └vendor
      └phpword(ダウンロードしてここに入れる)
        ├Examples
        ├PHPWord
        ├template
        └PHPWord.php

このような感じになります。fuelフォルダ下のpackagesフォルダ下に「fuelword」というフォルダを作成し、その下にclassesフォルダ、configフォルダ、vendorフォルダを作成。vendorフォルダ下に、PHPWordのページの「download」からphpword本体をダウンロード・解凍し、配置。

fuelwordフォルダの直下の「bootstrap.php」と、fuelword/classesフォルダの下に「fuelword.php」を自作します。私は以下の内容で自作しました。(下記は、フォルダ名、ファイル名が上記の通りであることを前提の内容)

ライセンスがどうなってるのかなど確認してないので問題があったら消します。

内容としては、たいしたことはしてません。他にスマートな方法がある気がしますが、時間が無いのでこれで済ませました。

実際に使ってみる

テンプレートから作成パターン

※テンプレートファイル(*.docx)は自分で用意

下記の参考リンクにも役立つ情報有りなので見てね。

1から作成パターン

↓こんな感じになります。
生成したワードファイル

参考リンク

もともと読書は好きだが、小説はほとんど読んだことが無かった。小説というものが、最も古く最も親しまれたエンターテイメントであることは認識しつつも、そこに嵌まることは無かった。あの文庫本の真っ白とは言いがたい黄色がかった紙を見ると、何か古くさいものを感じていた。それよりは、PCの画面を通してみる自分にはその裏の構造(HTML/CSS)まで透けて見える世界が好きだった。

数年ぶりに自分だけの自由な時間が出来て、それでも試験勉強なるめんどくさい大嫌いなものに向かわなければいけないときに、不意に活字を読みたい衝動に駆られた。同僚のかわいい子が小説が好きな子だったので、おすすめを借りたら、モノの見事に時間を切り取られるほど熱中した。その子はセンスが鋭く、また頭も良い子で、抜群に選択のセンスがあると感じていた。というか可愛い子だからそう思いたい。

そんな時に人生で初めて金銭的に余裕がある数ヶ月があり、そこで、前々から気になっていた電子書籍に手を出してみたくなった。自分としては、Androidタブレットは持っているし、電子ペーパー技術に興味があったし、充電の手間は嫌だったし、楽天が商売上手とは思っていないので、自然とAmazon Kindle PaperWhiteを選択した。安い方のWi−Fiのみモデルでも良かったが、そのとき金があったのと、やはりいつでもどこでも本が買えるという欲求を満たしてくれるのが、電子書籍の最大の利点だとも思っていたから、3G付きモデルを購入した。

安くて早くて旨い

Amazon Kindle PaperWhiteは、良く出来た端末で基本的に不満がないほど良く出来ている。それでいてAmazonが展開するKindleストアは、私のような小説を全然読まなかった男にしてみれば、安く大量に良い小説が読める最良のストアだ。とはいえ、実際の中古本よりも安くは無く、それでいて売ったりも出来ないのを価値に感じない人もいると思う。私はそうではなく、むしろ部屋に本がこれ以上増えないことを歓迎したい気持ちが勝る。本好きな人は紙じゃ無いと嫌だというし、本棚に並んだ本を見ているだけで満足できる人もいるだろう。実は私もその口で本棚に大量の本が並んでいる。しかし、それらは小説では無くほとんどが実用書か学術書だ。それらは実際の必要に駆られて並んでおり、すでにスペースを本棚2個分くらいオーバーしてオーバーした本は職場にあるか押し入れにあるかのどちらかになっている。私の場合、小説は一度読んだらまた再度読み直すことはほとんど無いだろうから、場所をとらずに、アカウント情報に紐付けられていつでも読みたいと思ったときに読める方が嬉しいのだ。

バックライト付き電子ペーパーは、夜のバルコニーでたばこを吸いながらでも読めるし、寝る前にも読める。また本体も軽く、電車で片手がつり革、片手がKindleで読み進めることも出来る。紙の本だとしおりが面倒だし、ドッグイヤーは好きじゃないし、ページをめくるのが片手だとうまくいかない。私は手が小さいし、そんなに器用でも無い。

それにくわえて、早川書房などが一斉にセールを行って、購入意欲をかぎ立ててくれて、あとは芋づる式に本をぽんぽん購入してしまっている。300円とか500円とかでAndroidのゲームアプリを買うこともあるけれど、それよりも財布のひもが緩んでいる。お得感があるし、自分が小説というものに嵌まってきていて、アプリよりも価値を見いだしているからだろう。

良さに気付くのはシリーズものに嵌まって止まらなくなったとき

「探偵はBARにいる」という映画が大泉洋主演でやっていたのを記憶していたが、その原作のススキノ探偵シリーズがセールになっていたので、第一作を読んでみたところ、大嵌まりしてしまった。もともと推理ものは好きだし、探偵モノも好きなので、当然なのかもしれないが、おもしろくて仕方が無い。

1冊読んで、また次のやつ、それも読み終わって、あぁ止まらない、次もだ!…と行くとき、次の日の朝の本屋が空く時間を待たなくて良く、またそのシリーズの次の買いたいヤツだけが本屋に在庫が無いという悔しい思いもしなくて良い。これがどれほど快適か、というのをこのKindleで思い知らされた。他方で、本を売る側からしても顧客の購買意欲が最大限高まったところを逃さなくて良いという利点があるのでは無いか。

小説というエンターテイメントは電子書籍でまた違う形を見せると思う

小説というエンターテイメントは、本屋や図書館、文芸雑誌や文学賞などで醸成されてきたと認識している。でも、このKindleは、それらをある種ケータイ小説に近いところに持って行くのだと思う。どこでもいつでも手軽に読めて、在庫に顧客が悩むことはなくなる。中間マージンが廃され、より多くの収益が数社の元締めと作家にもたらされるだろう。作家と読者がより強く繋がり、それらは多数の幸福と多数の不幸を招くだろう。小説はより身近で、より小粒な小説家がスマッシュヒットで食べていけるようになるかもしれない。それらは、小説の低廉化を招くが作家にはより多くの収益をもたらすとスマホアプリマーケットが一部証明している。
小説というエンターテイメントは、本屋や図書館、文芸雑誌や文学賞などで醸成されてきたと認識している。でも、このKindleは、それらをある種ケータイ小説に近いところに持って行くのだと思う。どこでもいつでも手軽に読めて、在庫に顧客が悩むことはなくなる。中間マージンが廃され、より多くの収益が数社の元締めと作家にもたらされるだろう。作家と読者がより強く繋がり、それらは多数の幸福と多数の不幸を招くだろう。小説はより身近で、より小粒な小説家がスマッシュヒットで食べていけるようになるかもしれない。それらは、小説の低廉化を招くが作家にはより多くの収益をもたらすとスマホアプリマーケットが一部証明している。

紙を愛する読者には受け入れられないかもしれないが、私のように小説の中の世界を愛する人間には幸せなことだと思う。より多くのより多様な作家が存在しうるエコシステムがすでに形成されつつあるのだ。
紙を愛する読者には受け入れられないかもしれないが、私のように小説の中の世界を愛する人間には幸せなことだと思う。