丸山純一郎という方が本書の書評を書かれていたので、読んだらまぁ驚いた!

少しでもプログラミングをいじったことがある人にっては特に学ぶところがないそうである。

確かに、本書は初心者が手にとりやすいように作られています。しかし、プログラミングを学習している人というのは、単純なグラフで表せるようなレベル分けができるものではないんです。誰に、どのような学習が、指導が必要か、これはたいへんなテーマです。本書がどのような人に適しているか、上記のような一言で片づけてしまうのは、どうなんでしょう。

たとえば、ここ数日私が本書を基に学んできたVagrantにしても、そりゃあ、Vagrantの専門書を読めば詳しいです。それを読めばいいじゃんか、と考えるあなたはとても頭の良い人か、人間を理解していないかどちらかです。

かくいう私も頭の冴えがかなり劣るので、難しい専門書は最初の数ページで玉砕します。ネット上の情報はぶつ切り過ぎて、それだけでは理解できない、私はね。頭悪いので。

本書は、それをメインに持ってきていないが、ある完成された環境を提供してくれています。私はそこから逆算して、分からないところをネットで調べたりすることで、ついに「自分で利用できるんじゃね!?」という希望を見出しているわけで。

初心者でない人が本書に価値を見出さないかどうかは、読者の姿勢の問題なのではないですかね。ま、本書に限らずですけど。

氏の、「この本の使い方」という欄に、

技術本としてテクニカルな知識や細かい知識を学ぶというよりも、読み物として読むのに適しています、とあります。

間違っているとは言いませんが、ネットの存在が巨大になる一方の現代において、「書籍が担う役割」というものについて、考えが古すぎないか?と私は思います。

書籍が全体像と、ある手本を示し、細かいところはネットで調べてね、もありなのではないでしょうか。というより、そういう使い方もありよ、ということを氏のような偉い方々が発信してもいいと思うのだがなぁ。だってね、作者が意図したかどうか別として、そういう使い方が出来る書籍って意外とないもんですよ?初心者向けは本当に初心者向けで、私らに飛躍のためのとっかかりを与えてはくれません。専門的なものになると敷居が高くてバカな頭では理解できません。本書のように敷居が低く、且つ私らにも「お?おぉ?」と思わせる要素が含まれているケースはそうそう当たるものではないんです。

ま、人のことはおいて置き、我が道を行きましょう。

せっかく本書を手掛かりにvagrantを紐解いたので、ちょっと冒険をしてみます。CakePHPの開発環境を作ってみようと思います。

本書では、

http://localhost:8000/

これで、プロジェクトのトップに(つまりはFuelPHPのスタートページに)たどり着きます。

これは、どこでそのような設定になるかというと、

C:\donichi\fuelphp-1.7.3\vagrant\fuelphp.conf

の中にその設定が書かれているっぽいです。

<VirtualHost *:80>
    DocumentRoot /mnt/fuelphp/public
    <Directory /mnt/fuelphp/public/>
        AllowOverride All
        Order deny,allow
        Deny from all
        Allow from 10.0.2.2 localhost
        EnableMMAP off
        EnableSendfile off
    </Directory>
</VirtualHost>

ここでドキュメントルートを決めているように見えます。で、vagrant upの際に動くbootstrap.shの中で、このconfファイルをhttpdへコピーしてますので、httpdがスタートされる際にここがドキュメントルートになるのでしょう。

まずは、もう少し単純な環境を作ってみたいと思います。CakePHP用のvagrant設定を置く場所を作るところから。

C:\cakephpというディレクトリを作ります。

別に、コマンドプロンプトで作らなくてもいいんですけど、このあとね、vagrant initってやつで、Vagrantfileを自動生成しようと思うのです。

ここらへんの情報は本書にはないので、ネットで調べますとすぐに出てきます。私は最初から情報としては知っていたのですが、vagrantと、VirtualBoxと、その動きについてイメージできずに、その情報を咀嚼できませんでした。

本書で提供されている環境をこねくり回してみることで、断片的な知識が繋がったんです。

Vagrantfileの自動生成については、このサイトがとても分かりやすかったです。

使用するOSは本書と同じものが良いので(何せ私の環境では32bitしか動かないので)、

こんな感じで、実行してみます。

vagrant init cakephp https://atlas.hashicorp.com/bento/boxes/centos-6.7-i386

本書で使われているbento/centos-6.7-i386はこのURLで取れるはずです。

Vagrantfileが出来てます。中は、

# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure(2) do |config|
  # The most common configuration options are documented and commented below.
  # For a complete reference, please see the online documentation at
  # https://docs.vagrantup.com.
  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://atlas.hashicorp.com/search.
  config.vm.box = "cakephp"
  # The url from where the 'config.vm.box' box will be fetched if it
  # doesn't already exist on the user's system.
  config.vm.box_url = "https://atlas.hashicorp.com/bento/boxes/centos-6.7-i386"
  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  # config.vm.network "forwarded_port", guest: 80, host: 8080
  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  # config.vm.network "private_network", ip: "192.168.33.10"
  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  # config.vm.network "public_network"
  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  # config.vm.synced_folder "../data", "/vagrant_data"
  # Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  # Example for VirtualBox:
  #
  # config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
  #   vb.memory = "1024"
  # end
  #
  # View the documentation for the provider you are using for more
  # information on available options.
  # Define a Vagrant Push strategy for pushing to Atlas. Other push strategies
  # such as FTP and Heroku are also available. See the documentation at
  # https://docs.vagrantup.com/v2/push/atlas.html for more information.
  # config.push.define "atlas" do |push|
  #   push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME"
  # end
  # Enable provisioning with a shell script. Additional provisioners such as
  # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
  # documentation for more information about their specific syntax and use.
  # config.vm.provision "shell", inline: <<-SHELL
  #   sudo apt-get update
  #   sudo apt-get install -y apache2
  # SHELL
end

思い切りコメントだらけですね。取りましょう。

# -*- mode: ruby -*-
# vi: set ft=ruby :

 

Vagrant.configure(2) do |config|
  
  config.vm.box = "cakephp"
  
  config.vm.box_url = "https://atlas.hashicorp.com/bento/boxes/centos-6.7-i386"

end

この2行のconfigが生きているだけです。そしてこれは、本書提供のVagrantfileとほぼ同じではありますが、box_urlなんかは質素?です。

なんか怒られてしまいした。vm.boxについての解釈が間違えていたようです。

https://atlas.hashicorp.com/bento/boxes/centos-6.7-i386

ここにアクセスしてみると、こんな記述が見えます。

vagrant init bento/centos-6.7-i386

これを実行しろと言っているようです。出来てしまったVagrantfileを消して、もう一度やってみます。

新しく出来たVagrantfileの中身は

config.vm.box = “bento/centos-6.7-i386”

が生きているだけのものになりました。

vagrant upを実行してみると、、なんかImportingしてますよ。。

興味深い出力ログです。

なかなかconnectionが取れなくて何度もRetryしてるのはご愛敬ですが、

ちゃんとcentOSは起動しています。しかし/mntの下になにもありませんね。

VirtualBoxマネージャーの画面です。上の電源オフになっているのが、本書が提供してくれた環境です。自分で作成したのが下の、現在実行中の環境です。これはcentOSが立ち上がっているだけで、Webサーバですらありません。今のところは。

vagrant upの出力の下の方にとても興味深い行があります。

Mounting shared folders…
/vagrant => C:/cakephp

マウントしてますよね。勝手に。Vagrantfileにはそんなこと書いてないのに。これで、実は本書で提供されているVagrantfileの中の、何してんだろ?と思った一行の謎が解けました。

私がコメントアウトして試した部分です。

config.vm.synced_folder ‘.’, ‘/vagrant’, disabled: true

この一行、この勝手なマウントを抑制するために書かれてたんですね。激しく納得です!

ほらぁ、勉強になるじゃないですか、丸山さん。

あ、いけね、人のことはいいんでした。

しかしさぁ、なんで、config.vm.box = “bento/centos-6.7-i386″ このたった一行のVagrantfileからサーバ出来ちゃうんですかねぇ。それはこれから作る、shellの中身にも言えます。

yumとか、誰?何してんの?あんた。って感じです。異様に簡単にWebサーバだろうが、mysqlだろうがこしらえちゃうんですよねぇ。

ま、今のところは、そういうもんだ、ということで。進みます。

次回、centOSに各種サーバや、phpやCakephp環境を作ることにチャレンジしてみましょう。

ちなみにWebストラテジストって何するのかなぁ、と思って調べてみました。結果、実はよく分かりませんでした。

試しにストラテジストの意味を調べると、

「投資戦略を考える専門家」とあります。また、ITストラテジストという資格もあるみたいで、こちらは、

「高度IT人材として確立した専門分野をもち、企業の経営戦略に基づいて、ビジネスモデルや企業活動における特定のプロセスについて、情報技術を活用して改革・高度化・最適化するための基本戦略を策定・提案・推進する者。」だそうです。

こんな表現も見つかりました。

「Webマーケティングコンサルタント(ストラテジスト)業界経験者歓迎」

これは人材募集ですね。

うーん。やっぱりこれ、畑違いの書評じゃないですかねぇ。。もっとエンジニアの人材育成に真剣に取り組んでいる人に書評してもらいたいなぁ、残りの人生をそこで格闘しようとしている私としては。ね。

私が会社を作った時のスローガンは「人の再生工場たれ」でした。自分が異常に遅咲きのエンジニアでしたから、身を持って知っている分、自信があったんです。誰でも目指せると。

だから私の採用は、他社とは真逆でした。「年齢、経験、学歴、性別、国籍不問」「経験者お断り、未経験者のみ採用」

どこに広告出しても応募は多かったです。二週間の掲載で、ちんけな名もない会社に100名の応募がくる。私がこれをやり始めたころは、未経験者採用する小さな会社はほとんどないと言っていいほどだったので、ほんとに応募が集中しました。今は、みなやり始めているので分散しますけど。

みんながみんな、そんな採用はできないと言いました。屑ばかりが集まってしまうと。

企業が優秀な人材を採ろうとするのは仕方ない。理解はできます。でも、それって面白いですかね。いや、批判するつもりはないんです。そういう世界に楽しさを見つけられないんですね。

それよりも私は、他社が採用しなかった、ダメの烙印をおされた人を手塩にかけて磨きぬいて一人前にすることのほうに大きな喜びを感じます。

だから、真剣なんですよ、どんな教材をどんな使い方をして、どんな補足をしてどう教えるか。

そのためには、自分がどういう勉強の仕方をして、どうハードルを超えていくか、も客観的に記録しておくのは重要な参考資料になります。

それでね、安易な判で押したような評論を目にすると、ついつい。反応しちゃうんですね。すみませんm(_ _)m