2013-01-04

素人が完全自作SNSを作ってみてわかったこと。

ひっそりと、Webサービスリリースしました

http://tag-chat.net

で、チャットがメインのSNSです。

自動マッチングしてチャット相手を見つけてくれるマッチングチャットや、すぐにチャット相手を見つけてくれるフリーチャットコミュニティチャット、フレンドチャットなど、とにかくチャットがメインのSNSです。





自分について

昨年の4月からプログラムを学び始めた素人。22歳。札幌在住。





■今更SNSを作ろうと思ったきっか

FaceBookがウザい。というか嫌い。

これがきっかけ。

顔本が良いSNSだと話題になっていたので、実名登録してみた。大学の知り合いが見つけてくれて、友達登録などが増える。(ほとんど話したことがない人から友達登録が来て、「おぉ!これで俺も友達が増えるんだ!」とワクワクしていた)。

が、流れてくるのは自慢ばっかり。

コミュ障彼女はおろか、女友達ほとんどいない自分にとって顔本で「飲み会行ってきたぜウェーイw」とか、「○○ちゃんの誕生日なう!」とか、「○○勉強会行ってきたました! みんな熱い人ばっかりで最高!」とか書いてあるのを見て「こんなSNSは嫌だ……」と思った。


ようするに嫉妬です。

で、自分の好きなようにSNS作ってみたいなぁ。と思いました。

自分趣味レトロゲーなので、自分と同じ趣味の人と話せたら素敵だな。ということでチャット式のSNSを思いつく。

が、Webサービスを独力でつくるのはこれがはじめて。というより、プログラム自体がはじめて。

案の定、前途多難だった。

やはりザッカバーグは天才だった。

そして私はアホだった。

■とにかく計画を立てる。

ざっくり、どんな機能が欲しいか考える。自分の力じゃ無理そうでもOK.とにかく妄想を爆発させる。

妄想した機能

・基本的なSNS機能

メッセージ機能コミュニティ機能あしあと機能日記機能コメント機能つぶやき機能など。

・核となるチャット機能

ミニティ専用のチャットルーム、アカウント専用のプライベートチャットルーム(鍵をかけられる)、自動チャットが開始されるフリーチャット自分の指定した条件にあう人を自動で見つけてきてくれて、チャットができちゃうマッチングチャット

などなど。






■そんなに簡単にSNSが作れるわけがない。

妄想するのは簡単だ。でも、全くわけがからない。何から手をつけていいのかわからない。

とりあえずグーグル先生相談

OpenPNEという簡単にSNSが作れるものがあると知る。

「うはwwww これで勝つるwww」と思ったけれど、どうやってチャット機能を追加して良いのかわからなかった。改変しようにも謎の記号がめちゃくちゃにならんでいてどうして良いかからない。

しかも、改変したら改変したでそれを全世界に公開しなくちゃならないらしい(オープンソースというらしい)。

無理だ。

と思ったので1から勉強することにした。

とにかくサーバーサイドの言語と、データベースについて勉強しろや! とのことだった。






■使う言語について。

サーバーサイドを扱える言語はたくさんあって、PerlとかPHPとかPythonとかRubyとか色々あるらしいのだが、色々悩んだ結果


PHPにした。WebサービスならPHPが良いらしい。レンタルサーバーなどでも簡単に扱えるらしい。

後でPHPがクソ言語という話も聞いたが、とにかく最初に選んだのがPHPだったので。

それになにがクソ言語かとか、未だによくわからない。






■入門の勉強で使ったもの

PHP 

よくわかるPHP教科書http://www.amazon.co.jp/dp/4839933146/

MySQLとかについて一通り書いてあるので良かった。二週間くらいでなんとか全部こなした。xamppなども触って、ローカルサーバーで色々試した。

これが終わったら、

パーフェクトPHP http://www.amazon.co.jp/dp/4774144371/

パーフェクトって書いてあるから、パーフェクトなはずだと勝手に思い込む。

実際かなりすごい内容で、胃もたれ起こした。一ヶ月くらいで三回くらい読んで、大体のところを理解した。

フレームワークCakePHPを使ったので、MVCについてのくわしい記述は大変参考になりました。



MySQL

基本的には、よくわかるPHP概要をつかんで、それから

基礎からMySQL勉強。 http://www.amazon.co.jp/dp/4797344385/

最期

ハイパフォーマンスMySQL http://www.amazon.co.jp/dp/4873114268/

インデックスの貼り方などについて勉強した。






チャットに向いている技術

とりあえず掲示板くらいはつくれるようになったので、チャットについてリサーチ

ajaxとかよくわからん技術nodejsを使った非同期処理などがあると知る。

nodejsはC10K問題という問題を解決するすごいものらしく、かっこいいらしいのでこれを勉強することに。

ついでにnodejsと相性の良い、mongoDB勉強することに。







javascript勉強

よくわかるjavascript  http://www.amazon.co.jp/dp/4839941874/

終わったら、

パーフェクトjavascript http://www.amazon.co.jp//dp/477414813X/

パーフェクトjavascriptnodejsについてものすごく詳しく書いてあったので、とても参考になった。このあたりで、LINUXというOSを扱わなくてはいけないと気付き、自宅PCウィンドウからLINUXubuntu)に変えた。


mongoDB勉強

これはとにかく触ってなんぼでした。MySQL感覚が違い、苦労しました。

CakePHPmongoDBを扱うのは

https://github.com/ichikaway/cakephp-mongodb

という素晴らしいものを利用させていただきました。




■このへんで一回限界がきた。

なんとなくnodejsを扱うこともできるようになり、それなりに楽しいと思ってはいものの、「SNS作ったる!」と思ってから六ヶ月以上が経過していた。

さらWebサービスを公開するにはデザインもそれなりにしなくてはいけないらしく、CSSなどについて勉強しなくてはいけないと知る。



勉強に終わりが見えなくて、「しんどいなぁ」と思った。

一人でWebサービス作ってる「ゆーすけべー」さんとかすごいなと思った。

勘違いサブカル野郎だと思っていた「家入一真」とかもやっぱりすごい人なんだと思った。

自分はなんもできないなぁ。と痛感した。



で、悩んでても仕方ないので、デザインはバッサリあきらめることにした。


もうなんでもかんでもやるのは無理なので、捨てるものは捨てることにした。

■それなりのデザイン他力本願で。

基本的に Initializr  http://www.initializr.com/  (テンプレートエンジン

TwitterBootStrap   http://twitter.github.com/bootstrap/  (Twitterっぽい今時な感じのデザインが簡単に使える)

を使うことに。

でも、これだとまさにTwitterそのまんまっぽかってので、

http://bootswatch.com/ (きれいなデザインテンプレートがあるサイト

も使うことに。デザインについてはこれだけ。

無理はしないことに。



■大体できたら、あとはセキュリティ

セキュリティ大事自分サイトでは一応、登録制なのでフリーメールアドレスなどを預かる。これは流出させたら困るし、なによりユーザー様が安心して使えないなんてだめなので。

これにはかなり注意したつもりです。

まず基本的なことは 『体系的に学ぶ 安全ウェブアプリケーションの作りかた』  http://www.amazon.co.jp/dp/4797361190/

勉強

本番環境に公開する前には グーグル先生が公開している skipfishというツールでチェックをしたり、

Dos攻撃対策に、

http://up-point-server.info/?p=54

などに書いてある

mod_dosdetector などを利用。

これははてなさんが公開しているものです。この場を借りて感謝します。ありがとうございます

あとはSSHへのブルートフォースを防ぐために、DenyHostというツールを利用するなどした。



それからバックアップ

クラウドサービスを利用しているので大丈夫だとは思うのですが、一応rsyncコマンドバックアップを定期的にとることに。

サーバー上の別の場所Gzipで保存し、それを自宅サーバーのCentOSで保存するという形式です。深夜にcronで自動的に実行しています

参考サイトは、

http://mukaer.com/archives/2012/03/14/vpscentos/

です。


パフォーマンス向上のために少しだけ

はじめはサーバーapacheだけだったのですが、今は画像ファイルなどはNginxというサーバーを使うのが良いそうなので、Nginxを使いました。

あとはPHPの中間キャッシュを利用するAPCなども利用することに。


このへんについては、

http://bren.jp/blog/%E3%81%95%E3%81%8F%E3%82%89vps%EF%BC%9Anginx-apache-%E6%A7%8B%E6%88%90%E3%81%AE%E8%A8%AD%E5%AE%9A%E6%96%B9%E6%B3%95/

このような解説記事がたくさんあったので、参考にさせていただきました。

調子にのって、最期グーグルアドセンスも貼ってみました。




■ようやく完成。

で、なんとか完成しました。

いちおう妄想していた機能は実装できたかと思います

製作期間は勉強期間なども含めて、大体9ヶ月くらいです。

使ってみた感想や、ダメ出しなど頂ければ狂喜乱舞します。よろしくお願い致します。









モチベーションを維持するためにやったこと。

あっさりと書きましたが、実際は失敗の連続でやる気が萎えてばっかりでした。

疲れて帰ってきて、なにもやる気の起きない時もありました。


そういう時は、とにかくサポートページのQ&Aの1文でも良いから書いてみるとか、とにかくパソコンエディターだけ立ちあげてみるとか、していました。

ものすごーく覇気のない目でキーボード打ち続けていましたが、それでもなんとか完成することができました。惰性だろうとなんだろうと、少しずつは進むのだとわかりました。

SNS作ってみたわかったこと。

やはり1から完全自作をするのは無謀だった。でも、プログラムをやったことのない素人でも約一年頑張ればそれなりのSNSもどきを作ることができた。

これも先人たちの作ってくれたフレームワークや様々なツール、そして参考書などのおかげ。

私のようなアホでも頭の良い人の力を借りればなんとかなりました。ありがとうございます

そしてプログラムは一人でも出来るので、私のように非コミュでも楽しめる素晴らしい趣味である

現在

今はRubyに夢中です。くり返し処理がすごくきれいにかけるので素敵な言語だと思っています。あと、javascript面白いので毎日いじくって遊んでいますPHPももちろん触っています

非コミュあいかわらずですが、プログラム楽しいので前より幸せです。


仕様した技術など一覧

サーバー さくらVPS4Gプランを使用しています

Apache,Nginx,nodejsを利用しています

データベース mongoDBMySQLを使っています

フレームワーク CakePHP,socket.io

使用言語 PHP,Javascript

できたもの http://tag-chat.net

トラックバック - http://anond.hatelabo.jp/20130104184115

記事への反応(ブックマークコメント)