このページは、以前、翔泳社運営サイト「ワンダフルクリエイターズPage」で公開されていたものを、許可を得て、再掲したものです。
ワンダフルクリエイターズPage

 

特集

特集001専門家に訊く10のクエスチョン 作りたいもの別
“どんなプログラミングを勉強すればいいの?”
第1回「WEBサイト編」

 ワンダフルクリエイターズPageオープン記念の特集は、「【専門家に訊く】作りたいもの別“どんなプログラミングを勉強すればいいの?”」です。第1回目にご登場いただくのは山田祥寛(http://www.wings.msn.to/)さん。山田さんは、WEBサイトに関するいろいろな技術をテーマにした数多くの書籍/雑誌記事の著者として、またWeb上などのさまざまなフォーラムなどでも大活躍されています。マイクロソフトより「Microsoft MVP for XML」を授与されているスペシャリストでもあります。そんな山田さんに、WEBサイトを作るためのプログラミングについて、いろんなお話を伺います。


[編集部] 記念すべき第1回目に、山田さんにご登場いただけて光栄です。どうぞ、よろしくお願いいたします。
[山田祥寛氏(以下、山田氏)]
こちらこそよろしくお願いします。
[編集部] では、さっそくで恐れ入りますが、始めさせていただきます。

【Q1】お仕事は、主にサーバサイド分野の執筆ということですが、そもそも、この分野に興味を持った理由は? また、時期はいつごろだったのでしょう?
[山田氏]
 今でこそこんな仕事をしてますが、正直、学生の頃は10年後に自分がこんな仕事をやってるとは思っていませんでした(笑)。子供の頃から「小説家」になりたいとは思っていたので、ものを書くのは好きだったんですけどね。まさかコンピュータ書を書くことになろうとは..

 それはともあれ、私がサーバサイド分野に興味を持ち始めたのは、比較的最近なんです。そもそもインターネットを始めるようになったのも、大学在籍中のときでしたし、初めてホームページなるものを作成したのも、当時部長をやっていたテニスサークルの紹介サイトを作成しようということになって、慌ててHTMLを勉強した、というのが始まりなんです。その後、JavaScriptやVBScript、Javaアプレットなんかでチマチマとしかけを作っていたんですが、ダイアログを出したり、アニメーションを作ったりと、たいして面白くないぞ、と思ったんですね。

 そんなときに、CGI(Common Gateway Interface)を使えば、もっと面白いことができそうだ、ということを聞いて、Perlを始めたのが「サーバサイド技術」に触れた最初だったと思います。別に、これからは「サーバサイド技術が主流だ」とか「今後のために勉強しておきたい」とか、大層な思いはありませんでしたね。とりあえず「なにか面白そうだな」という程度だったわけです。
▲TOP

【Q2】いつから、今のような書籍を書かれるようになったのですか?そのきっかけはなんだったのでしょうか?
[山田氏]
 最初の書籍を執筆したのが1998年12月です。

これまた、きっかけはいい加減なもので(笑)、さっきお話したテニスサークルのページがありましたよね。最初は、このページがなかなかアクセスしてもらえなかったんです。一テニスサークルのローカルなページだったので、当然といえば当然ではあったんですけど。でも、せっかく作ったのにそれでは悔しいといって、JavaScriptやらPerlやらでしかけを施して、このしくみを別の専用サイトで紹介したんですね。技術だけはそのサイトで紹介して、具体的に動いている実用例はこちら、とリンクしたわけです。そうしたら、意外とアクセス数が伸びて。

別にテニスサークルに興味があってのアクセスではないはずなので、その時点でただの自己満足ではあったのですけど(笑)。でも、そのサイトを見て、「本を書いてみないか」と声をかけてくださった編集者さんがいらっしゃったわけですから、世の中、何が起こるか分からない。

それがきっかけで、最初は1年に1冊くらいのペースで書籍を書いてましたが、いつのまにか、ペースが上がってきて、結局、これが本業になってしまいました。いやぁ、実際、なにがきっかけで人生が変わるか分からない...

▲TOP

【Q3】山田さんは、現在、自宅でお仕事をされているそうですね。普段は、どんな環境(PCの種類とか様子とか)で仕事をされていますか? フリーでお仕事をされているということで、生活が不規則になるなどということはないのでしょうか?
[山田氏]
 生活ですか?不規則ですよ(笑)

 でも、会社に勤めていたときよりは健康的になったかもしれませんね。会社に勤めていた頃は、時計が夜中を回ってから帰宅して、それから原稿を書いて、朝方4時位に寝床に入って、朝7:00には会社に出かける...みたいな感じでしたから。ひどい時には、朝6:30にようやく寝床に入って、7:00には起きて会社に出かけるなんてこともありましたよ。そんなときは相方に少しでも早く寝てもらって(といっても、相方も4:00くらいなんですが)起こしてもらうんですが、相方も大変だったと思いますよ。そんな生活が休日もなく2年くらい続いたのは、今となってみると、よく持ったなぁという感じです。

 それに較べると、今も相変わらず夜は遅いですけど、遅いときにはそれにあわせて朝も9:00とかまで寝ていることができるようになったので、気分的にもラクですね。ただ、油断していると、いつのまにか昼夜が逆転してしまうようなこともありますし、甘えを作ってしまうと、いくらでもダラダラできてしまうのが自由業の怖いところですので、集中力や士気の維持のような、自己管理という意味では大変になったような気がします。

 あ、あと仕事の環境でしたっけ?ご紹介するのも恥ずかしいような環境ですけど、こんな感じです(笑)。ちょうどこのインタビューの直前に引っ越したばかりなので、まだ部屋の中は比較的きれいですけど、これがあと一月もすると、いい感じに汚くなるはずです。

 使っているパソコンは、DELLのXPS D300、Pentium U 300MHzのメモリ320MBという、1世代も2世代も前のスペックです。友人などにはよく、(山田の家には)さぞかし高性能のサーバがずらりと並んでいるんだろう、と言われるんですが、実態はこんなものです。まあ、私が執筆業を始めてから、ずっと使っているので、もうかれこれ6〜7年くらいは使っているのかな。あまり不便もなく、よく動いてくれているので、なんとなく買い換えそびれています。ここまで一緒に執筆をしてきた相棒だと思うと、なかなか捨てられないんですよ、これが(笑)。
山田氏の仕事場
山田氏の仕事場
▲TOP

【Q4】J2EEにせよ、.NETにせよ、ライブラリやフレームワーク、応用アプリケーションが増えてきました。敢えて自分でプログラムを組まなければならない状況はどんどん少なくなってきていると思いますが、今後、プログラミングが必要になるのは、主にどのような部分なのでしょうか?
[山田氏]
 確かにほんの数年前と較べてさえ、今はとても便利になりましたね。こんなことがやりたいと思ったら、ちょっとググってやれば、いくらでもそれを実現できるライブラリやアプリケーションがでてくるわけですから。

 開発フレームワークも、ずいぶん便利になりました。個人的には.NET Framework(というか、ASP.NET)が大好きなのですが、本当によくできていると思います。2005年後半に登場予定のASP.NET 2.0は、本当に部品を切って貼って、カスタマイズはすべてパラメータの変更だけでOK、という世界を地で行っている感じですよね。細かいところまで気配りが行き届いていて、IDE(統合開発環境)や開発言語、プラットフォームとも密接にリンクして1個の世界を築いている。もちろん、そこに批判も多いわけですけど、私は好きです。

 ただ、だからといって、どこまで行ってもプログラミングの世界がなくなることはない。フレームワークにしても、ライブラリにしても、要はごく定型的な機能なり枠組みなりだけを提供しているにすぎないわけですから、自分のビジネスは自分でプログラミングするしかないわけです。当たり前のことですけど。

 だから、逆にいえば、便利な機能はどんどん使って、その上に自分の付加価値(プログラム)をどんどん乗せていってほしいですね。今は付加価値だと思っていた機能が、将来的には定型的な機能として誰かが提供してくれるかもしれない。でも、そうしたら、また新しい付加価値を見つけていけばよいわけです。その追いかけっこが、技術もビジネスも進化させる原動力だと思います。

▲TOP

【Q5】”Webサイト作り”に必須のプログラミング言語はなんですか?必須ではなくても、「これもできたらいいかも」というオススメのプログラミング言語など。
[山田氏]
 正直、必須というものはないと思います(回答になっていませんか(笑))。やれJavaだ、C#/VB.NETだ、あるいは、PHPだ、といろいろ言われますけど、どれを使っても大して変わらないですよ。まずは、自分がこれだと思うものを見つけて(時として、仕事でどうしても習得せざるを得ないような場合もあるかもしれませんが、それはそれで運命ということで(笑))、それを学習してみればいいんじゃないでしょうか。

 大規模なシステムにはやはりJavaを、という話もありますけど、それも正確ではないと思います。一昔前は「Personal HomePage tools」であったPHPも、最新のPHP5ではオブジェクト指向の概念を取り込んで、また、ライブラリも充実してきたことから、これからは十分にエンタープライズなシステムにも適用できる技術になっていくと思います。.NETも、実績ではJavaに劣りますが、着実に経験を重ね、技術・技術者ともに成熟した技術(言語)になりつつあります。要は、突き詰めていくと、どの技術も行き着こうとしている先は大して変わらないものですし、実際、技術的な違いというものも、どんどん少なくなりつつあります。1個の技術さえきちんと習得してしまえば、その次の技術を習得するのは、かなりラクになると思いますよ。「あ、これって○●ではこれのことなんだな」みたいに、頭の中で対応関係が自然と描けてくるはずです。

 もし敢えて申し上げるならば、あまり1個の技術に拘泥しないで下さいね、という点でしょうか。いくら技術的に似通ってきたとはいえ、やはり異なる技術には異なるアプローチや異なる思想が含まれています。そうした違いを相対的に見られる視点を持っている、というのは、プロのSEでなくても、とても大切だと思いますよ。

 手前味噌で恐縮ですが、拙著では「JSP/PHP/ASP サーバサイドプログラミング徹底比較」、サイト記事では「ASP.NET vs. Struts フレームワーク徹底比較」のようなものもありますので、単なる技術書/記事だけではなく、たまにはこんな文章も読んでみると、新たな発見があるかもしれません。

▲TOP

【Q6】プログラミング言語を習得するには、どのようにするのが良いでしょうか?
[山田氏]
 これも人それぞれにパターンはあると思うのですが、私は基本的に「サンプルを真似する」ところから入ります。あんまり難しい理屈や構文から入っても、どうせ面白くない。自分の目で動きを確認し、実際に手を動かし、体験することで、まず「感動」することが大切だと思います。まずは「すごい!」と感動して、その感動を学習の糧にするわけですね。

 もちろん、それだけではなくて、実際に動かすことで気づくことも意外と多いはずですよ。本からコードをただタイピングするだけでも、すぐにはうまくいかないということは結構多いはずです。それを頑張って動かすことによって得られた発見は、本を読んでいるだけでは絶対に気付くことのできない自分だけの知識です。これまた手前味噌で恐縮ではあるのですが、「今日からつかえる」シリーズ(秀和システム)や「10日でおぼえる」シリーズ(翔泳社)などは、そんな思いのもとで執筆した書籍ですので、是非、これから新たな技術を勉強しようとされている方は、お読みになってみてください(笑)。

 ただ、当然、ここで勘違いしていただきたくないのは、真似っこだけで終わってほしくないということ。よく、こんなサンプルでは業務では使えない、と読者の方からお叱りを受けることもありますが、正直、私はサンプルはあくまであるテーマを分かりやすく見せるためのものにすぎないと思っています。サンプルは、必ずしも業務で実用できるコードとイコールではありませんから、当然、サンプルで最初に学習された方は、必ず入門書に戻っていただきたい。そこで、基本的な考え方やルールを学ぶことで、土台固めをすることは必須の条件です。この過程をなしに、ただサンプルの真似だけをしていても、(たぶん、それなりのアプリケーションは組めるようになるはずですが)どこかで壁に突き当たるときがくると思います。それは地道な作業ですが、絶対に欠かしてはいけないものです。私の書籍であれば、「独習ASP.NET」「改訂新版 基礎PHP」「プログラミングワンダーランドへいらっしゃい JSP&サーブレット編」などが、こうした目的で執筆したものです。

 あとは、標準で用意されたチュートリアルやAPIドキュメントを読んでいただきたい。もちろん、隅から隅までというわけではなくて、日々、ちょっとした合間を見つけて「眺める」というのが大切だと思います。そうしたドキュメントは、噛み砕かれた入門書に較べると得てして読みにくいものですが、凝縮した内容の中にさまざまな知識が込められていることが多いものです。ですから、きちんと理解するためには、その技術を更に勉強しなければならない。ドキュメントを読み解くために、自然と関連する知識が身につくというわけです。また、当然、困った時にも「あ、これって確かあそこに書いてあったな」と思いつく可能性が高くなるというのも大きなメリットでしょうね。

▲TOP

【Q7】近頃は便利な開発環境も増えてきました。Visual Studio .NETやEclipse、Web Matrixなどが特に有名ですが、これらについてはどう思われますか?
[山田氏]
 実は、私は統合開発環境は使わないんです。もちろん、近頃では記事執筆の関係もあり、検証や使い勝手を体感するために使うことも多くなってきましたが、相変わらず、JSPやPHPでアプリケーションを構築する時には「メモ帳」野郎になりさがります(笑)。もっとも、これは単なる好みの問題で、統合開発環境が便利だと感じる人は大いに使うべきだと思います。実際、上で挙げて頂いた統合開発環境はいずれもよくできていますし、うまく使えば、十二分に生産性を向上してくれる代物です。「だったら、おまえも使えよ」といわれそうですが、これは本当に個人的な好みということで許してください。

 ただひとつ、これも個人的に思うのは、初学者の方が勉強する時には、なるべく専用の開発環境は使わないで頂きたい。開発環境は確かに便利ですが、もともと人間がやらなければならなかったところを、うまくオブラートに包んでしまう。これが、なにが包まれてしまったのかを既に知っている人ならば、全然構わないのですが、最初からオブラートに包まれてしまうと、それ自体のしくみが分からなくなってしまう。これが、とても怖いと思います。

 もっとも、これは別に開発環境だけに言える話ではなくて、ASP.NETやJ2EE、PHPといった昨今の技術についても言えると思います。これらの技術はそれぞれとてもよくできている。たとえば、HTTPというプロトコルの存在を知らなくてもWebアプリケーションが作れてしまうわけです。

 JavaやC#、VB.NETも同じ、かつてはどのプログラマも苦労していたメモリ管理などという世界をまったく知らなくても、アプリケーションが組めてしまう。あるいは、難解なアルゴリズムの世界を知らなくても、メソッドをひとつ呼び出せば、ソートができてしまう。

 さきほどと矛盾したことを言っているかもしれませんが、便利なものを大いに利用するのは結構、しかし、その一方で原始的なところに遡る試みもしていただきたい。そうした一見、その場では役に立たないように見える基本知識が、きっとどこかでより実際的な知識を体系化する下支えになるのだと思います。

▲TOP

【Q8】いざ“WEBサイト作り”を始めよう、という際に注意しなければならないことはどんなことでしょうか?
[山田氏]
 上流設計をしっかりと、開発生産性や保守性を考慮してデザインとロジックとは分離する、などとお決まりのポイントはいくつでもありますが、これらはそれぞれの書籍や記事をご覧頂くとして(笑)。

 やはり一番大切なのは、「なにを目的になにを作るのか」をはっきりさせることなのではないでしょうか。別に、サイト作りに特化した話ではなくて、なにか物作りをするときの基本だとは思いますけど、要は「それを作ると、なにが便利になるのか」「それの付加価値はなんだろう」という点をはっきりさせることです。

 これまたよく言われることですけど、ソフトウェアを作成していると、未だにシステム化、電子化することがまずありきというケースがよくあります。今でこそ、ROI(Return On Investment)とか投資利益率とか言われて、企業ではシステム投資に対する実利益が意識されることが多くなってきましたが、これは企業システムに関わらず、個人のサイトでも同じだと思います。

 それって本当に作らなければならないの、それをまず問うてみてください。冒頭のお話ではないですけど、それで別に自分で作らなくても既存のアプリを使えるということであれば、どんどん使ってしまえばいいわけです。逆に、まずそれらが使えないかを考えてみる。自分のやりたいことを少し丸めれば、既存のものを使えるというならば、どんどん使っていけばいいんです。自作なんてものは、最終的にどうにもならなくなったときの最終手段なわけで、やらないにこしたことはない。いろんな知識を手に入れたからといって、それをむやみと振り回すことはない。

 さっさと器を作ってしまって、そこからいかにコンテンツを拡充していくか、日々更新できる運用の仕組みを作っていくか、そちらの方がよっぽど重要なんです。皆、日々忙しい忙しいといってるわけですから、少しでもラクをしましょう。

▲TOP

【Q9】Webサイトは将来どうなっていくとお考えですか?
[山田氏]
 いっときの、いわゆる「HTMLクライアント至上主義」的な流れは、明らかに過去のものになりました。結局のところ、単純な文書のやりとりをするには、HTML+Webの組み合わせはとても優れた媒体だったわけですが、なにせ操作性が良くない。それこそドラッグ&ドロップすらろくにできないHTMLの世界は、ユーザインターフェイス的には1世代も2世代も遅れた代物だったわけです。それがようやく気付かれ始めた、というか、これまでも皆気付いていたわけですが、それを言葉に出して取り上げる余裕がようやく出始めた、というのが今の時期です。

 もちろん、だからWEBが廃れるとかいう話ではなくて、WEBがようやく相対的なものになっていくだろう、ということです。WEBでなにもかもを完結しようというのではなくて、スタンドアローン・アプリケーションもあれば、メインフレームの世界もあり、もちろん、既存のHTMLベースのアプリケーションもあり。それらのアイランドを、WEBは疎に繋ぐ標準的な媒体になっていくはずです。それらの傾向は、EAIとかSOAなどという言葉に、まさに象徴されるところでしょう。

 その中で、コアとなるビジネスロジックの部分は、厳然と変わらないところだと思います。一方で、いわゆるクライアント技術はまだまだ変わっていくと思いますよ。今は、リッチクライアントという言葉がまだ流行りだと思いますが、これもある意味、過渡期的な概念なのかなと。殊更に「リッチ」などと称さなくても、その場その場で最適なクライアント技術が選択できる――ある意味、すべてが「リッチ」なクライアントがあり、あとはWebがそれらをつないでくれる、というのが理想なわけですから。

▲TOP

【Q10】今日はいろいろとありがとうございました。では最後に、“WEBサイト作り”を仕事にしたい、“WEBサイト作り”のプロフェッショナルになりたい、という想いを持つみなさんに、山田さんからのメッセージをいただけませんでしょうか?
[山田氏]
 いろいろ矛盾するようなお話をしてしまいました。基礎からしっかり学ぼう、便利なものはどんどん使ってラクをしよう――いったい、どっちなんだ、と言われてしまいそうな気もしますが(笑)、要はどっちも重要なんだと思います。

 要は緩急をつけていただきたい、と。勉強には王道も近道もありません。一見、遠回りだと思えることでも、一歩一歩、地歩を進めていくことが、最終的には自分の血肉になっていくのだと思います。でも、現場でいつも遠回りをしているのは愚の骨頂です。現場ではできるだけラクをして、ラクをした分をより高い付加価値に回していただきたい。そのバランスと使い分けを体得することが、プロフェッショナルということなのだと思います。

 あとは、「とにかく知識だけの人にならないでください」です。Webにはとかくさまざまな技術や関連するさまざまな要素があります。ともすれば、それらをただ詰め込むことが一義的になりがちですが、それらは所詮、断片的な知識にすぎません。大切なのは、これらを前提に、自分の意見なり考えなりを持つことだと思います。たとえば、今回のインタビューの質問にご自分の考えでもって答えてみるのも、良い試みかもしれません。それが皆さんの付加価値だと思います。逆に、知識はあくまで付加価値の材料に過ぎません。

 なお最後に。私自身、著者としてサーバサイド技術に興味を持つさまざまな方々とお話する機会を持ちたいと思っています。このインタビューに関する件、その他、拙著/拙稿に関する件、なんでも結構です。なにか物申したいという方は、メール(CQW15204@nifty.com)にてなんなりとお願いします。皆さんとのコミュニケーションの中で、新しい発見がひとつでもふたつでも生まれたら嬉しいなと思っています。

▲TOP

[Profile]
山田祥寛氏 山田祥寛(やまだよしひろ)

千葉県在住のフリーライター。書籍、雑誌の執筆を手がける傍ら、最近では講演活動などを行う毎日。また、サーバサイド関連の記事執筆コミュニティWingsの代表者でもある。Wings(http://www.wings.msn.to/)では、現在も一緒に執筆をできる有志を募集中。執筆に興味のある方は、どしどし応募頂きたい。