さまざまな疑問をすぐに質問できる、エンジニアとして働き始めたばかりの人にとって便利なサービスが「teratail」(テラテイル)です。エンジニア向けQ&Aサイトとしてすでに多くのユーザが集まっている同サービス上では、日々多くの質問と回答がやりとりされています。ここでは、teratailを運営しているレバレジーズのエンジニアであるメディア事業部 システムグループ リーダーの寺尾貢氏、そしてteratail開発責任者でありgihyo.jpにて「聞いたら一生の宝、プログラミングの基礎の基礎」の記事連載をしている本橋佑介氏(※)に、teratailに寄せられた質問に回答していただきました。
開始1年弱で会員数1万人を突破したteratail
編集部:それでは、まずteratailの現状を伺えますか。
本橋氏:昨年4月にベータ版をリリースし、7月に本格的に提供を開始しました。ベータ版の提供から1年弱ですが、おかげさまで会員数が1万人を超え、それと同じタイミングで回答数も1万件に達しました。実際、単純に人が増えているだけでなく、teratailが活発になってきたなと感じています。また、ちゃんと質問する文化であるとか、そういったところも育ってきていて、使っていただいているユーザのレベルアップにもつながっているのかなという印象を持っています。
寺尾氏:僕自身はteratailの開発には直接携わっていないのですが、新卒採用の面接でteratailを知っているという学生も増えているので、若い層まで知名度は高まってきているなと実感しています。
編集部:盛り上がっていると感じるカテゴリはどういったものですか。
本橋氏:やっぱり初心者ものが盛り上がっています。回答者としても答えやすいんでしょうね。初心者のころって、「こんなの聞いてよいのかな?」と、質問することに躊躇してしまうことがあると思うんですけど、まずはどんどん聞いてみることが大切だと思います。初心者であっても、わからないことは思い切って発信していってほしいですね。
編集部:ちなみに本橋さんは、新人時代にどのようなことに苦労されましたか。
本橋氏:僕は社会人になってからプログラマになったのですが、一番始めに教えてもらったのが寺尾なんです。当時彼はすごく忙くて、わからないことを聞くのがまずたいへんでした。それと、正直に言うと全部わからないんですよ(笑)。一応コードは書けますが、何が正しいのかわからない。そのわからないことについて、どこがわからないのか、どうわからないのかを一旦整理して、一言で返してもらえるように質問するというのが苦労したところです。
編集部:寺尾さんは新人の質問で困ることはありますか。
寺尾氏:答え方に困ることはありますね。コードをこう書けばできるよって答えちゃうと、質問した人の成長につながらないじゃないですか。なので、答えは言わないようにすることをポリシーにしています。ただ、答えを言わない場合、その人のレベルに合わせて教えることを考えなければいけないので、そこは苦労しています。
データベースやフレームワークはどうやって選ぶ?
編集部:それでは実際にteratailに投稿された質問を見つつ、お二人に“これからエンジニアになる”という人たちに向けてのアドバイスをいただければと思います。
本橋氏:投稿された質問を見ていると、何を使えばよいのかっていうのは多いですね。言語だったりツールだったり。
寺尾氏:データベースに何を使うのか、というのも目立ちますね。
編集部:データベース系で言えば、最近はRDBMSだけでなくNoSQL系も広まってきていますね。これからエンジニアとして活躍するなら、やはりNoSQLも理解しておくべきでしょうか。
寺尾氏:知識としては必須になると思いますが、一方でRDBMSの中にNoSQLが組み込まれる動きも出てくるので、特定のプロダクトを覚えるよりはしくみ自体を学習しておいたほうがよいかな。
本橋氏:あとは、フレームワークの選定とかも目立っていますね。
編集部:JavaScriptのフレームワークは最近盛り上がっている印象ですね。ただ、数が増えてきたので、どれを使うべきか頭を悩ませているエンジニアも多い印象です。
寺尾氏:目立っているのはAngularJSとBackbone.js、Knockout.jsくらいかな。どれも特徴があるので、まずそれぞれのよいところをしっかり理解し、プロジェクトの目的に合わせて利用するべきだと思います。
本橋氏:そうですね。プログラミング言語やデータベース、フレームワークはあくまでも道具で、適切なものを選択できるようになることがエンジニアとして一番重要なので。
編集部:フレームワークといえば「CakePHPの学習方法」という質問が気になりました。
寺尾氏:フレームワークを学習するときは、過去に作ったことがあるもの、たとえばブログのシステムをそのフレームワークでもう一度作ってみるのが、一番全体を理解しやすいかな。
本橋氏:すでにあるものを作るのもよいですよね。
寺尾氏:そうそう。新しいものをいきなり作ろうとすると挫折するので。もちろん、作る前にリファレンスや書籍で勉強しなきゃいけないと思いますけど。
きれいなソースコードを書くための秘訣は?
編集部:「この記述のjsをもっと簡潔にしたいです。」(図1)という質問の回答は盛り上がっていて印象的でした。
本橋氏:いわゆるコードレビューものですね。この質問で言えば、もう少し読みやすさに気を配ったほうがよいかな。それとHTMLのタグを直接書いてしまっているので、糸口がちょっと少ないかなと思います。パッと見たときに、「append」と「join」ぐらいしか使っていないので。
編集部:確かに何がどこに入るのか、一目では把握できないですね。
本橋氏:もっといろんな書き方があることを知るには、やっぱり人のソースコードを読んだほうがよいと思いました。動くものを作れているので質問できる段階ではあると思いますが、リファレンスやほかのWebサイトのソースコードをガンガン読んでいけば、もっときれいなものがスッと出てくるのかなと。
エンジニアの性質として、きれいに書けたときや、すごく短くシンプルなコードになったとき、ドヤ顔をするんですね(笑)。僕がそういうタイプなんですけど。
寺尾氏:これ以上ないだろうっていうね。
本橋氏:そういうドヤポイントを作れるとよいのかな、と思います。一度作れるようになると、その快感から逃げるのが難しくなるので。それとこの質問でおもしろいのは、答えがないところですよね。みんながそれぞれ意見を言える。こういう使い方もありだなと思っています。
編集部:お二人も可読性やコードの美しさにはこだわられていますか。
寺尾氏:こだわりますね。あとで書き直したいと思うことも多々あります。職業としてやっている分、どうしてもスピード重視でコードを書かなきゃいけない部分があり、納期を守らなければならない。ただ、それでも気になって、書いたコードを書き直したくなる。これは趣味なのか、性格なのか。
本橋氏:僕の場合は見栄なんですよ。だから汚いソースコードを見られるのは、とても恥ずかしいんです。
寺尾氏:それはすごくわかる。恥ずかしいよね。
編集部:きれいなコードを書くには、どうすればよいのでしょうか。
寺尾氏:書き終わったあと、自分のコードを見直してみること。それで何のコードかが理解できれば、少なからずほかの人も多少わかるコードになっています。とはいえ、自分でも1年前に書いたソースコードを見ると、何だこれって思うことはありますが。
本橋氏:自分のレベルの低さにびっくりしますよね、去年の俺は何をやっているんだって。あと、先ほども言いましたが人のコードを読むことです。ただし、膨大な量のもの、どこから読めばよいのかわからないようなものは精神的にキツいので、たとえばjQueryやSublime Textのプラグインを読んで、少しずつ成功体験を積みながら勉強するのがよいと思います。
寺尾氏:僕は一度カーネルを読もうとして挫折していますね(笑)。OSの基幹なので、読むとすごい自信につながると思いますが、最初に読むべきものではないなと。本橋が言うように、プラグインとかはよいですね。
Webアプリケーションのセキュリティ対策はどうする?
編集部:初心者のうちは難しく感じるだろうなと思った質問として「サーバーのセキュリティ対策について教えて下さい」というのがありましたが、セキュリティ対策にはどういった視点で取り組むべきでしょうか。
本橋氏:まず、セキュリティ対策の重要性を理解することがスタート地点になります。特にエンジニアとして働き始めたばかりだと、とにかく動かすことに目が行きがちで、セキュリティには意識が向かない人が多いと思います。ただ、ぜい弱性を突かれて攻撃を受ければ、たとえば個人情報流出による多額の損害賠償やサービスの停止など、非常に大きな損失につながる可能性もあるわけです。そこを理解できないと、なかなか身につかないですよね。
編集部:初心者が犯しやすいミスには、どういったものがありますか。
本橋氏:SQLインジェクションやOSコマンドインジェクションなど、一般的なぜい弱性に対する対応が不十分であったり、あるいはセキュリティ面でのチェックが甘かったりというミスですね。
編集部:具体的にはどのようにチェックすればよいのでしょうか。
寺尾氏:自分の書いたコードに対して一般的な攻撃手法を試すとどうなるかを確かめる。たとえば、パラメータの値に想定していない内容を入れるとどうなるか。そうやって自分で攻撃してみるというのはあると思います。
本橋氏:攻撃手法は増えていくので、最初に勉強したあとも新たな攻撃手法の情報をキャッチして、それを自分で試してみる。擬似的に攻撃してくれるツールもたくさんあるので、そういったものも活用するとよいのではないでしょうか。
そのとき、ツールがすべてセーフだと判定しても、何を調べてセーフと言っているのかを把握することで、たまたまセーフだったのか、それともセーフになるべくしてなったのかが見えてきます。インプットとアウトプットだけを見るのではなく、中間のところも理解しようとすれば大丈夫かな、と思いますね。
寺尾氏:そういう意識は持っていてほしいよね。
本橋氏:持っていてほしいです。そこを意識できていないサービスには、僕はメールアドレスなどの個人情報を預けたくないですね。
しっかり回答がもらえる質問の仕方とは?
編集部:「mysqlでデータベースへの接続はできるが」(図2)という質問があって、ちょっと質問が長いなと感じたのですがいかがでしょうか。
本橋氏:たぶん、質問された方は真面目に書かれているんですよね。思う限りのことを。なので、質問の仕方としては正しいんじゃないかと思います。
寺尾氏:自分のやったこととやりたいことが、ちゃんと明確になっている。それを質問の中で提示しているので、努力しているのが見えるし。
編集部:長くなっても丁寧に質問したほうがよいということですね。
寺尾氏:そうですね。この質問をした人は、「こういう手順でやったけど、できませんでした」と何をしたかを書いているので、「じゃあこれを試して」って、回答者が次の手を出しやすいんですよね。経過をちゃんと書くのは、質問して回答をもらううえで一番大事かなと思います。もし、途中経過を書かずに「できませんでした」だけしか書いていなかったら、回答者も答えづらいでしょうし。
編集部:そのほかに、質問するうえでのポイントってありますか。
本橋氏:問題のある個所とその前後のソースコード、それとエラーメッセージはまず必要です。それがないと、糸口はつかめないと思うので。
寺尾氏:ソースコードの何行目のエラーが出ていますと言われても、ソースコードがなかったらわからないしね。
本橋氏:あとは何をしたいか、何をするときにエラーが出たのか。何を書いたのか、その前はできていたのか。そういった情報があると、質問の精度は高いと感じます。質問する側なわけですから、自分が持っている情報は伝えなきゃいけない。
寺尾氏:それって、文章でも口頭でも変わらないんですよ。職場の先輩のところに行って、動きませんと言っても答えは得られないと思うので。
本橋氏:「そうか」としか言えませんからね(笑)
寺尾氏:何をしたくて、何が動かないのかをちゃんと説明しないと答えようがない。たぶん、そこは職場の先輩に聞くときも、teratailで聞くときも変わらないポイントだと思います。
エンジニアをバックアップし、業界に貢献していきたい
編集部:最後に、読者に向けて、teratailの名前の由来となった寺尾さんからメッセージをお願いします。
寺尾氏:そうですね。エンジニアになりたいという人が減ってきていると言われている中で、teratailがこれからエンジニアになる人をバックアップする存在になり、エンジニアが増えていく。そういった形で貢献していきたいと考えています。
編集部:いろいろとお話を伺わせていただき、ありがとうございました。
- teratail(テラテイル)
- http://teratail.com
- 取材協力/株式会社レバレジーズ
- http://leverages.jp