はてなキーワード: nodejsとは
大きいくくりだとjavascriptです。サーバー側でも実行できるように派生したのがnodejsです。なのでnodejsのコードをブラウザで実行しても動かないことが多いです。実行環境が仮想マシンで有名どころはgoogleが作ってるv8エンジンがあります。nodejsて書いたコードはこのエンジン上で動きます。
>nodejsについて、nodejs+expressをローカルマシンで動かす場合使用する言語はjavascriptなのでしょうか?
現在はDenoが強く推奨されているようですが。
ECMAScriptが標準になりますが、Node.js独自のライブラリー、Expressを使うなら当然Expressのライブラリー、その他の外部ライブラリーなどが普通に使われます。
外部ライブラリを使用可能にするには事前にインストールが必要です、外部ライブラリを使う場合には「require()」などで参照が必要です。
なので当然ECMAScript以外の勉強も必要です。
素のJavaScriptは大規模開発に適さないので、TypeScript化することで大規模開発に適します、小規模開発なら素のJavaScriptでおkです。
TypeScriptは学習難易度が高いのがデメリットです。
当方ソフトウェアエンジニアで勤務先の環境がクソすぎるので転職しようと思っているのだが、
転職先の開発環境を面接で聞く際にどこまでが常識でどこまでが過剰要求なのかが分からないので教えてほしい。
ちなみにGithubアカウントはちゃんと持っているし, OSSにもコミットしているよ.
などなど. 個人環境としては可もなく不可もなくという状況なのだが、
でもメーカーのクソなところで, だいたいネットにはつながっていない.
技術書を読んでいる人が皆無.
我流で書いた上司先輩のクソコード以外読んだことない人しかいないので.
このレベルはもう期待していない.
いいなぁ~. ネットの世界にはこの環境で仕事ができる人も存在するらしいよ.
はてな見てると、はてなにいるような技術に関心を持つような人は実際には存在しないんじゃないかって思うぐらい、
私の周囲のソフトウェアエンジニアのレベルの低さに呆れるので、
普通の(はてな基準)エンジニアと一緒に普通の(はてな基準の)会社で仕事をしてみたいなぁ.
Densoの方の退職エントリでも, Densoでもこのレベルかーという内容だったし、
日本でWEB系以外で"""欲しい"""の基準以上は不可能なのかなぁ。
はぁ
今までの自分のスキル関係なく、今日からスクラッチでソフトウェア開発するとしたら、どんな環境がいいんだろう?という問いかけです。
ちなみに自分は以前組み込み系のエンジニアでWeb系は詳しくない&ここ1年ソフトウェアの仕事から離れてましたが、最近Webアプリ作りたいなと考えてます。
・組み込みソフト・・・基本C言語、最適化するとこはアセンブラ、マイコンのコンパイラが対応してたらC++
・Windowsアプリ・・・C#(.net framework)、nodejs(electron)
・スマートフォンアプリ・・・3DだとC#(Unity)、Dart(flutter)、javascript(React)、作り込むならネイティブ(iOSはswift、androidはKotlin)
・Webアプリ・・・nodejs、ruby(on rails)、Dart(flutter+firebase)、python(Django)
・社内アプリ・・・社内がマイクロソフト環境(outlookとかteams)ならPowerApps
・AI開発・・・python(TensorFlow、scikit-learn)
とある受託開発の会社を経営してんだけど、まぁ俺が元々フリーでエンジニアやってた時の延長線上みたいな会社でさ。
と言っても、もう20年目で社員は25人で小さいながらもまぁまぁな規模なんだけど、売り上げは安定しないし、給料はうなぎ登りだし。。
5年前にとある製品を俺主導で開発して、毎年本業の受託の30%くらいの売り上げが立つようになっていい感じだったんだけど、
一昨年あたりから売り上げが下がり出して、もう今はほとんど0になってしまい、次の製品の開発が必至な状態なんだけど、
ほとんどの社員は本業の受託で一杯一杯だし、手が空いてる人といえば俺くらいしかいなかったのね。
まぁなんだかんだで、営業もマネージメントも仕組みとしては回ってて、俺はキャッシュフローの管理と、勤怠が悪いような
元々Webエンジニアなので、NodeJSとかReactとか勉強し直して、今時のアーキテクチャーでまぁ今時のスタートアップ的な
サービスを作ってさ、今日社員みんなに次期製品のPoCとして発表したんだけど、アラフィフで元々ASP(Active Server Page)とか
JavaでWebシステムを開発してたのが、フロントエンドもWebpackから始まって、SCSS、ReactのHookとか理解して、バックエンドも
ちゃんとRestfulなAPIで設計してさ、DBもMySQLで結構頑張ったんだけど、反応がそれはもう微妙で。
まぁそれまで誰にも言ってなかったのも悪いんだけど、長い付き合いの社員に社長がやるんじゃなくて社員からボトムアップ的に
やらないと盛り上がらないよと言われて、まぁ至極正論なんだけど、ただでさえ受託でパツパツなのに、誰がやるねん見たいなさ。
だったらトップが自ら動こうと思ったらこんなんで。ちなみにアイデアは本当に悪くなくて、実装も綺麗にしたんだけど、
まぁ多分社員的にはつまらない受託の仕事の傍ら、イケイケの技術で自社プロダクトの開発をやりたいんだろうなぁ。
Webでは単純にテキストサイトではない本当に色々なことができるようになってきた。
HTML5になって以降まさに飛ぶ鳥を落とす勢いだ。
ここ5年くらいでデスクトップアプリに負けないレベルのSaasも出てきた。
Slack、Youtubeや生放送、Googleドキュメント、Google mapをカーナビ代わりにしている人もいる。
Javascriptも相変わらず日進月歩でTypescriptやらNodejsやらReactやらVue.js Three.jsなど、もうテキストサイトの付属品ではないことは明らかだ。
個人的にはWebGLでアプレットを使わず3Dの描画ができるようになったのは衝撃的だった。
そんなわけで、Webはどんどん急激に高度化し大規模化してきている。
ここまで大規模化していったシステムはセキュリティ的にもシステム的にもこれまでのような少数のチームがちまちま作るには手に負えない状況に来ているんじゃないかと思う。
それが表面化してしまった事件が今回のコインチェック事件ではないか。
コインチェックはおそらくWeb系のエンジニア主体でイケイケで開発したんだと思われる。
ただセキュリティが甘かった、つまりシステムとしてセキュリティ(内面)に問題があった。
これはまさにWebエンジニアの弱いところを突かれたといっても過言ではない。
それに伴ってWeb企業もSIer化していくんじゃないかというのが私の持論。
全てとは言わないが、これまでのWeb系エンジニアの開発スタイルはどちらかというとイケイケドンドンでできたらいいや使えたらいいやの精神でやってきたんじゃないか。
これでは大規模なシステムになるとセキュリティも保守も難しくなってくるだろう。
大規模なシステムはきちんとオブジェクト指向で作ってテスト駆動でウォーターフォール式で開発するのが筋ってものだ。長期的な目で見れば理にかなっている。
今後高度化していくWebに対応するためにはそうやって作っていくべきだろうし、自然にそうなっていくだろう。
大規模なサービスに関わるWebエンジニアは自然にSIer的になっていくんじゃないか。
Googleスライドとかスプレッドシートはヤバいくらい複雑なシステムだと思うしハイクオリティだとおもうんだけど、どんな開発体制で作られたんだろうか気になる。
twitterでvimとneovimの2語で検索すると勘違いしてる人がちらほらといる。
https://twitter.com/search?f=tweets&vertical=default&q=vim%20neovim&src=typd
特定のツイートURLを引用したいがかわいそうだからやめとくけど、
誰かがちゃんとVimとNeovimについて説明しないからこうやって初心者が勘違いする。
pukiwikiよりもpukiwiki plusが良いみたいな考えね。
nodejsよりもio.jsとかvert.xが良いみたいな考えね。
それなりにVimに精通してる人達がVimとNeovimが別物だということをちゃんと提示しないとダメだと思う。
こういうのは世界中のpatch投稿者のモチベーションダウンにつながる恐れがある。
ちゃんと違いを知った上でNeovimを選択するなら構わないが、よく知らないのにVimはオワコンと決めつけるのは大至急やめなさい。
:echo 1 / 0 :echo 0 / 0
2147483647 -2147483648
きっしょwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
他の言語もチェックしてみるか
package main import "fmt" func main() { fmt.Println(1 / 0) fmt.Println(0 / 0) }
echo 1 / 0; echo 0 / 0;
PHP Warning: Division by zero。
print 1 / 0 print 0 / 0
ZeroDivisionError: integer division or modulo by zero
print(1 / 0) print(0 / 0)
ZeroDivisionError: division by zero
nodejsだと1/0と0/0で異なるメッセージが表示された。
console.log(1 / 0);
Infinity
console.log(0 / 0);
luajitだとnodejsで表示されたメッセージの短縮形で表示された
print(1 / 0)
print(0 / 0)
main = do print(1 / 0)
Infinity
main = do print(0 / 0)
public class Test { public static void main(String[] args) { System.out.println(1 / 0); } }
public class Test { public static void main(String[] args) { System.out.println(0 / 0); } }
Exception in thread "main" java.lang.ArithmeticException: / by zero at Test.main(Test.java:3)
#!/bin/bash echo $((1 / 0)) echo $((0 / 0))
test.bash: 行 4: 1 / 0: 0 による除算です (エラーのあるトークンは "0") test.bash: 行 5: 0 / 0: 0 による除算です (エラーのあるトークンは "0")
haskellとnodejsとluajitはエラーにならないけどまあいい。
Vimはやべえよ。
何を作りたいかというとマルチプレイヤーのブラウザゲームが作りたいんだよね。
俺の開発用のceleron 1コアのメモリ1GB環境では重すぎる。
isoファイルを10000個同時にダウンロードしてるぐらい重すぎる。
ページの読込みがなかなか完了しない。
こんなクソ重いフレームワークはそれなりのサーバスペックがないとパフォーマンスに影響が出すぎるので除外したい。
phpのフレームワーク一般に言えるんだけどプロジェクト毎にプロジェクトルートのなかにフレームワークのコアファイルを置くのがなんか嫌だ。
nodejsはシングルスレッドなので負荷の高いサイトで使うのは厳しそう。
pythonでもgolangでもwebsocketは使えるのでnodejsにこだわる必要もないしvert.xを使う選択肢もある。
日本ではvert.xの話題あんまり盛り上がってないよね。どこかの企業さんが実践で使いましたって記事を書いたら会社の知名度が上がると思う。
scala,golang,elixirこの3つの選択肢でいいのかな。
でも負荷の高いブラウザゲームやってる会社ってrailsとかphpだよね。
redisをうまく活用しとけばあんまりそれ以外でボトルネックとなるようなことって無いのかな。
スクエニさんのオンラインのドラクエもどうやってるんだろうね。
あと海外のブラウザゲームってほとんどがaws使ってるのでaws使えばいいのかな。
でも怖いよね高額料金を請求されたらさ。
プログラムの癌(Runy)をなくすの前に人間の癌をなくすやり方について書いておこう
癌は熱に弱い。42度の熱で消滅する。心臓に癌ができないのは熱に弱いから 外部から熱をあてて癌を直す治療がある。ハイーパーサーミアという治療法で厚生省から認可がおりており健康保険がきく。1回3千円くらい 10回セットで3万円くらい 病院にいけばやってくれる。動物病院でもやっている。42度の熱をあてるだけ 手術がない 体に負担がかからない 副作用もない 入院がいらない 時間が取られない 抗がんん剤や複雑な手術をする必要ない。体を痛めない
でだ ここからが問題だ まずハイーパーサーミアの機器を導入している病院が少ない。少ない理由は病院が儲からないから 3万円では医者が儲からないしやりたがらない。最近ハイーパーサーミアが知れ渡ってきてハイーパーサーミアの操作できる人が不足を理由に取りやめる病院が出てきている。また一緒に抗がん剤を抱き合わせてきたり、効果がないと否定してお金や体に負担がかかる3大療法をすすめてきたりする。3大療法はやらないほうがよい。放置もよくない。それより熱線をあてることに徹した方がいい。近くにハイーパーサーミアがなかったり、受けられなかったら、三井式温熱治療器やダイエットサウナをおすすめする。治療が受けれるのであれば3大療法よりハイパーサーミアだけやる。3大療法もやめたほうがよい。ハイパーサーミアは高いステージから生還してるし、費用が安く、副作用もなく、時間が取ることなく、体に負担がかからない。
抗がん剤は結局正常な細胞を弱らすだけでがん細胞を消滅させるわけではないのでけっしてやってはいけない。もちろん放置もいけない。
三井式温熱治療器やダイエットサウナでも体に42度の遠赤外線をあてる事が出来る。
三井式温熱治療器はアマゾンや楽天で買える。レビューがたくさん書かれていて癌に効果があったとたくさん書かれている。
ハイパーサーミアの医療現場で使われているサウナ機器(スマーテイ)もアマゾンで売っていたりする。
これで外から42度をあて続けるだけでよい
三井式温熱治療器の楽天のレビューを見てみる 癌治療に効果があったと高評価が150件が書かれている 要確認
http://review.rakuten.co.jp/item/1/202385_10001070/1.1/
三井式温熱治療器のamazonでも癌治療に効果があったと多くの高評価が書かれている 要確認
心臓 癌
癌 熱
癌 熱
などを調べてみると実際受けた患者の感想が書かれている。どれも末期だとか手の施しようのないといわれたとこから生還している。
ちなみに血液性の癌や白血病には高濃度ビタミンC点滴が有効 保険はきかない
日本の医療は米に10年 欧州に20年遅れていると言われている。
なので他の病気に関しても日本の医者の言う事よりもまず欧州がどんな治療をしているか調べてから判断した方がいい。医者はSilrだと思え
欧州では2008年の段階で癌が減っている事が記事になっている。
www.news-medical.net/news/2008/04/10/30/Japanese.aspx
http://hayabusa6.2ch.net/test/read.cgi/cancer/1251284895/
他にもここに詳しく書いてあるぞ!
http://apps.wiki.fc2.com/wiki/その他
プログラムの癌と言えば動的言語のことだろう。それを広めようとする関係者、開発者もまたがんだ。
メーカー製の静的言語フレームワークを使えば誰でも簡単に高度なことができる。
わざわざ出来損ない言語を引っ張りだしてきて、無駄に苦労したり、無駄な苦労を広めたりする輩はほんとうにがんだ。
その苦労は数年後無駄に終わる。動的言語は数年ごとにバージョンアップを繰り返し、今書いているものは
すべて動かなくなる。2007年頃に意図的に起こされた第一次Rubyブーム 1.7のRubyはもう動かない。
互換性の問題で起動できないし、サポート対象外だから脆弱性だらけ 今もRailsやNodejs angluerなどが
意図的にブームが起こされているが、それらも数年後には使えなくなる。負債にしかならない。
IT経営者にとってはそのほが都合いいのだろう。仮に辞められてもその技術で手間がかかりすぎて独立はできない。アプリストアがあるわけでもない。課金プラットフォームがあるわけでもない。 だからIT経営者はいきばのない技術者を酷使し放題だ。動的言語は技術者を自由にさせない鎖付きの言語なのだ
鎖のついてない言語は何か?それはC#だ。C#はシステムを簡単に作れる。管理画面サイドはexeアプリで作り、サーバーサイドはasmxとado.net ORMを使えば一日でWEBアプリケーションが作れてしまう。リファクタが効き、ビルドができエラーは直ぐ見つかりアップデートも自動でソースを書き換えてくれる。C#ができるとUnityからlot Robot スマートフォン タブレット One Windows 医療 業務用アプリまで 様々な分野に進出することができる。Railsではこうはいかない。Webしか作れないし、3年後にはバージョンアップが行われ、その都度のコードの修正に時間を取られる。つきっきりになっていないといけない。他の事が出来なくなる。ビルドできないからすぐバグがわからない。バグ潰しに時間を取られる。動的言語の現場がいつもギスギスしてるのは、バグが探しの疑心暗記がいつのまにか人に向けられていじめみたいなことになっている。
IT派遣事業者にとっても動的言語はいつまでも脆弱性が発生し続け、保守作業がうまれる都合のいい金になる言語だ。
企業が無料で教えるのには彼らだけが儲かるカラクリがあったのだ。今もRuby On Rails Ruby JavaScript Node.jsなど意図的なブームが起こされている。
メーカー製の静的言語やっている身からすると動的言語をやる輩はとても愚かだ。静的言語なら自分で書いたコードは自分の資産になる。
静的言語で書いたコードはリファクタが効くし、コンパイルでバグがすぐわかる。コードを最新のバージョンに自動で書き換えてくれる。
共通ライブラリを他のプロジェクトで使い深い内容で書いても、元のプロジェクトで開いた時にビルドでバグがすぐわかるから、深い内容で共通ライブラリを書く事ができる。
自分用の共通ライブラリを出来上がってくると開発速度があがっていく。無理に20倍速の早さとかメデイアで煽られて複雑に書かなくても、一度書いた物を組み合わせて使い回していけば生産性は普通にあがっていく。
動的言語では共通ライブラリを深い内容を書くのは難しい。バグを発見に時間がかかるから、浅い内容のことしか書けない。生産性があがらない。ファイルの管理に追われて断片化したり バグを探したり バージョン管理に追われたり いつまでも手間が掛かる始末だ。
なぜこんな無駄な言語を使い続けるのか なぜあのブックマークはRubyの時だけ数字がはねあがるのか不思議でしょうがない。Botにブックマークさせてるのではと疑ってしまう。
2007年頃のステマRubyブームで騙された技術者は酷い目にあってたいはんはRubyから去っている。
求人がある訳ではない。アプリストアがあるわけではない。脆弱性は出し続ける。すぐ互換性がなくなる 使う用途が限られている。汎用性がない
加えて他の動的言語にも言える事だか
フレームワークの乱立 CMSの乱立 フレームワーク自体バージョンがあがると別ものになる。フレームワーク自体に脆弱性がありサポートしてくれない。プロジェクトごとにフレームワークを学び直さないといけない
フロントサイドとサーバーサイド 両方 動的言語選択してしまってカオスな状態。スパテッゲテイすぎて再利用は不可、資産は築けない。
こんな安心して生きていけない言語は止めて、iPhoneアプリ、C#アプリの開発をやるべきだ
医者は儲かるからという理由で人の命よりお金になる抗がん剤を優先するのと、Silrが儲かる理由で脆弱性が多い動的言語を推奨するのは同じムジナだろう。
http://anond.hatelabo.jp/20130104184115
の元増田です。
ひっそりと公開したはずのtag-chat.net(http://tag-chat.net)ですが、
まさか、こんなに反響を頂けるとは思っていなかったので、びっくりしました。
素人のフリをしているとか、出版社のステマだとか色々言われましたが、嘘は一切書いてないです。
ステマというか、ウェブサービス公開後の状況を知っている方からするとマイナスのステマにしかなっていないような気がします…。
公開してから、色々と発見というか気づきがあったので、それを共有できれば幸いです。あと、tag-chat.netの中身についてなど。
・意気揚々と自作SNSを公開したものの、アクセスが全くこなくて途方にくれる。
⇓
・以前、完全に一致を作った増田の方が、増田記事を書いてからアクセスが急に来たと書いてあったので真似して書いてみる。
⇓
・翌日ごろから、アクセスが集中。ビビる。「うちの会社で働きませんか?」と言ったお誘いのメールをたくさん頂く。
いきなりの出来事にパニックになっている間にも増田記事が拡散していき、アクセスが急増する。
⇓
アクセスが爆発する。1時間あたり二万アクセスというアクセスを捌ききれずにサーバーが落ちる。サイトのウリであるが、メモリ使用量
⇓
・その後、サーバーを増強。エラー情報や、寄せて頂いた情報をもとに各種エラー情報や、使い勝手などを改善。
⇓
・現在、安定稼働中。おかげさまで、ユーザー数もゆるやかに増加していて、基本的な機能も正常動作しています。ユーザー数はもうすぐ
1000人に届きそうでありがたいばかりです。
と、いうわけでなんとかようやく落ち着き、ウリのマッチングチャットも正常に作動しているようなので、後記事を書きます。
■ウェブサービスの公開前に注意すべきだったこと。
①・セキュリティについては書かないほうが良い。色々といじられる。
前回の増田記事で、DoS攻撃の対策などについて語ったのですが、それを確かめるためなのかサイト公開してしばらくしてから、定期的に
Dos攻撃をくらいました。
おかげ様で、ちゃんと一時的にそのIPからのアクセスを遮断することはできたのですが、セキュリティについてあまり大々的しゃべると攻
撃対象となるので、あまり具体的なセキュリティ対策などについてはしゃべらないほうが良いのかな、と感じました。
また、DoS攻撃だけでなくCSRF試したり、色々といたずら(もしくは善意のテスト?)をして下さる方がとても多かったのには驚きました。
はてな民の技術レベルの高さを知りました……。いたずらされている間は本当に怖かったです。
とりあえず、今のところ攻撃は防げているようです。
はじめ、私は調子に乗ってサイト内に英語を多用していたのですが、それがユーザー様にとって混乱のもとになっていたようです。
例えば、他のユーザーから自分の書いた日記などにコメントがついた時に、それを知らせるページがあります。
普通に考えれば「友達からの反応一覧」とか「友人からの反応」とかにすれば良いのですが、何を血迷ったのか「Reaction」と中二病丸出
しで書いてしまったので、ユーザー様がものすごく混乱したようです。
結局、「使いにくい」、「サイト内迷子になる」との声を受けて日本語メニューに変更しました。
③・使い方のページはくどいくらい書いても良かった。
フリーチャットや、マッチングチャットでは、基本的に相手が見つかるまでは「待ち」の状態になります。
相手がすでにこちらを「待っている」状態だとすぐにチャットが始まるのですが、そのことに対する説明が足りなかったようで、チャット
ルームを出たり入ったりしている人が多かったようです。
また、チャットが終了した時にチャット相手にお礼をこめてメッセージを送る機能があるのですが、これも説明不足で上手く使われなかっ
たようです。
とにかく、くどいくらい説明しても良かったと思います。
■ウェブサービスをリリースする前にやっておいて良かったこと。
①・Twitterのアカウントを作りそこから最新情報を流せるようにする。
これは本当に大きかったです。
とつぜんの増田砲で一時間あたり二万アクセス近くのアクセスをさばけずに、サーバーがビジー状態になってしまった時も、Twitterを通
じて現在の状況などを流せたことは非常に大きかったです。
②・エラー情報を送ってもらえるようにメールアドレスを作っておく。
本当にありがたいことに、実際に使ってみた使用感や、こんなエラーが出ていると言った情報を送って下さる方がいます。
一人でテストしていた時には気づかなかったエラーや、不便な点などをわざわざ時間をとってメールで教えてくれるのです。
どこの馬の骨ともわからん怪しい奴が作ったものに登録してくれ、使ってみてくれただけではなく、エラー情報や励ましの言葉を送って下
さるのです。
本当にありがたいことです。
③・それでもわからないエラー情報に対して対処できるようにしておく。
優しいユーザーの方がエラー情報などを教えて下さるのは大変ありがたく、また開発の励みにもなるのですが、それに頼ってばかりいて
はダメです。
サーバーの吐き出すエラー情報を調べて、おかしな挙動にいち早く気づく必要があります。
本当はhttpdのエラーログとか見れば良いんですけど、はっきり言って物凄く見づらいので、ツールを使って毎日「こんなエラーがでました
」と教えてもらうようにしておきました。
色々なツールがあるみたいですが、私はlogwatchを使いました。
・参考URL
http://www.atmarkit.co.jp/flinux/rensai/root04/root04c.html
これでエラーの出ているところだけでも、修正するということをやっていました。
■ ウェブサービスを運営してみてわかったこと。
①・SNSの人の流れにはなんだかよくわからない規則性がある。
tag-chat.net グーグルアナリティクスでどれくらいの人が毎日来ているかをウォッチしているのですが、なぜか月曜日と週末にかけてア
クセスが増えます。
謎です。週末はわかるけれど、どうして月曜日に……?
②・やっぱり非リアの気持ちは非リアじゃないとわからない。
「どうして普通にはてブに書かないのか。なんで増田なのか」とか「非リアを装って」
とかコメントしてる人たちがいたのですが、その人たちは非リアについてなんもわかってないアホだと思いました。
もともと自分で名前なり、アカウントを明かした上ではてブに投稿できるくらいの度胸があれば非リアになんかなってないです。それは自
分でもわかってます。
自己顕示欲が人一倍強いくせに、人に名指しで批判されるのが怖いから増田に投稿したのです。
フェイスブックに実名でウェブサービス作ったことを投稿できるような度胸があればそうしてますし、はてブに書けるなら書いてます。
そうするだけの度胸もなくて、でも誰かに認めては貰いたいから増田に書いたということをわかっていない。
③・ネットのみなさんが優しい。
今までネットの人たちは2ちゃんねるとかで炎上したり、なんか面白そうなものを見つけてお祭り騒ぎする、ちょっと怖い人たちという
イメージだったのですが、それが今回のことでガラリと変わりました。
本当に優しい人が多くて、どこの馬の骨ともわからない奴の作ったウェブサービスを使ってくれるだけでなく、感想や励ましのメールな
どをたくさん頂きました。
遥か雲の上の存在だと思っていた会社の方からもメールなどを頂きました。本当に感謝してもしきれません。
~技術編~
①・nodejsを使って外部にサービス公開するなら、認証は必須。主に不正な負荷を減らすために。
さっき書いた、「セキュリティについてはあまり書くな」という話と矛盾するのですが。
nodejs、すごくアクセスさばけて、なおかつ軽いということで便利なんですが、サーバーなので、基本的にリクエストを受けたら非常に素
直に返事します。
例えば、nodejsとsocket.ioを使って、単純にメッセージをサーバーに送るとして、クライアント側で
のようにすると、サーバーはどこから来たアクセスなのか、とか悪意のあるアクセスなのか? とか一切気にすることなく、素直に'hoge'
これはつまり、第三者が悪意を持って大量にメッセージを送りつけるとそれを素直に受け取ってしまうということです。
なので、例えば大量に不正なデータを送りつけられたりするとレスポンスが悪くなります。
なので、悪意のあるアクセスはsocketにそもそも接続させない、という対策がサーバー側で必要になると思います。
socket.ioではコールバックを使って、簡単に認証させるかさせないか、という実装ができます。具体的には以下のURLなどを参考に実装す
http://d.hatena.ne.jp/Jxck/20110809/1312847290
②・nodejsの最大接続数は、ファイルディスクリプタに依存する
ということにしばらく気づかずに、最大接続数が400ほどしか出ず悩んでいた時に以下のURLを参照して、なぞが解けました。
http://blog.livedoor.jp/mokepon/archives/182178.html
またsocket.ioのテストの書き方ですが、
http://d.hatena.ne.jp/toritori0318/20120902/1346591831
という素晴らしいエントリーがあったので参考にさせて頂きました。
■楽できるところは楽するためのツールなど。
nodejsの開発で、面倒くさいところはできるだけ楽しました。以下、便利だったものまとめ。
・node-dev
コンソールにデバッグ情報を吐き出してくれ、サーバー側のコードをいじくった時に自動的に再起動してくれる。
いちいちコマンドプロンプトからnodejsを実行する必要がないため、作業の手間がはぶける。
nodejsを触り始めた時はエラーを吐いてばかりなので非常に役に立ちました。
参考URL
http://d.hatena.ne.jp/replication/20110224/1298474534
・forever
様々な使い方があるようですが、stop,list,startの3つぐらいしか使いませんでした。まだ、研究中です。
参考URL(基本的な使いかたが非常にわかりやすく書かれています)
http://nantekottai.com/2011/08/15/node-js-based-service-with-forever/
・mongoose
ドキュメントは色々ググったのですが、結局公式のドキュメントが1番わかりやすかったです。
~モチベーション編~
■一人でウェブサービスを作る上で、心の支えになった記事。
http://d.hatena.ne.jp/Hamachiya2/20080131/security
とにかく楽しんで、作ってみることが大事だよ、というお話です。すごい勇気づけられます。
・小飼弾さんの産声の話。
http://blog.livedoor.jp/dankogai/archives/51837985.html
弾さんは、お金持ちで、腕は一流で、PHPこき下ろすし、なんかすごく怖い職人のイメージだったのですが、このエントリーを読んで、クソ
まみれでも産声を上げてみようと思えました。
実は優しい人なのかもしれません。私の高校時代の担任の先生にどことなく似ています。
■お詫びと訂正
前回の増田記事で、OpenPNEについて間違った記載をしてしまいました。ソースコード公開に関する記述の部分です。
OpenPNEではそのソースコードを改変したら、そのソースコードを公開しなくてはならないと書いたのですが、これは間違いです。
OpenPNE方々には大変ご迷惑をお掛けしました。申し訳ありませんでした。
あと入家さんに謝りたいです。
フェイスブックにもとりあげて頂いたそうで、ありがとうございます。
怖いのでどんな投稿なのかはまだ観ていませんが、本当にありがたいです。
■最後に。
ウェブサービスをコツコツと作り続けて公開したところ、増田記事のおかげもありたくさんの反響を頂きました。
ただ、別にウェブサービスを公開したからと言って、実際のところ何かが劇的に変わったわけでもないです。
グーグルアドセンスは支払い規定の一万円を超えていないので、手元には一銭も入ってきませんし、実名出して行動できなかったので現実
あいかわらず休日は地元のゲームセンターでレトロゲーをやって時間をつぶしていますし、学校から帰ってきたらももクロのライブを観て
、Chai Maxxを踊ってから寝るだけの毎日です。それでも結構楽しいのですが。
ただ、ネット上で様々な先輩エンジニアの方々や、同年代で同じようにフェイスブックが嫌いな方から励ましのメールをもらいましたし、
本当に、びっくりするような充実した二週間でした。
はてブで人気のエントリーにあがった時のスナップショットは未だに大事にとってあります。
tag-chat.net(http://tag-chat.net)を作って本当に良かったと思っています。
自動でマッチングしてチャット相手を見つけてくれるマッチングチャットや、すぐにチャット相手を見つけてくれるフリーチャット、コミュニティチャット、フレンドチャットなど、とにかくチャットがメインのSNSです。
■自分について
昨年の4月から、プログラムを学び始めた素人。22歳。札幌在住。
FaceBookがウザい。というか嫌い。
これがきっかけ。
顔本が良いSNSだと話題になっていたので、実名登録してみた。大学の知り合いが見つけてくれて、友達登録などが増える。(ほとんど話したことがない人からも友達登録が来て、「おぉ!これで俺も友達が増えるんだ!」とワクワクしていた)。
が、流れてくるのは自慢ばっかり。
コミュ障で彼女はおろか、女友達もほとんどいない自分にとって顔本で「飲み会行ってきたぜウェーイw」とか、「○○ちゃんの誕生日会なう!」とか、「○○勉強会行ってきたました! みんな熱い人ばっかりで最高!」とか書いてあるのを見て「こんなSNSは嫌だ……」と思った。
ようするに嫉妬です。
で、自分の好きなようにSNSを作ってみたいなぁ。と思いました。
自分の趣味がレトロゲーなので、自分と同じ趣味の人と話せたら素敵だな。ということでチャット式のSNSを思いつく。
が、Webサービスを独力でつくるのはこれがはじめて。というより、プログラム自体がはじめて。
案の定、前途多難だった。
そして私はアホだった。
■とにかく計画を立てる。
ざっくり、どんな機能が欲しいか考える。自分の力じゃ無理そうでもOK.とにかく妄想を爆発させる。
メッセージ機能、コミュニティ機能、あしあと機能、日記機能、コメント機能、つぶやき機能など。
コミニティ専用のチャットルーム、アカウント専用のプライベートチャットルーム(鍵をかけられる)、自動でチャットが開始されるフリーチャット、自分の指定した条件にあう人を自動で見つけてきてくれて、チャットができちゃうマッチングチャット。
などなど。
妄想するのは簡単だ。でも、全くわけがわからない。何から手をつけていいのかわからない。
「うはwwww これで勝つるwww」と思ったけれど、どうやってチャット機能を追加して良いのかわからなかった。改変しようにも謎の記号がめちゃくちゃにならんでいてどうして良いかわからない。
しかも、改変したら改変したでそれを全世界に公開しなくちゃならないらしい(オープンソースというらしい)。
無理だ。
とにかくサーバーサイドの言語と、データベースについて勉強しろや! とのことだった。
■使う言語について。
サーバーサイドを扱える言語はたくさんあって、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で勉強。 http://www.amazon.co.jp/dp/4797344385/
最期に
ハイパフォーマンスMySQL http://www.amazon.co.jp/dp/4873114268/
とりあえず掲示板くらいはつくれるようになったので、チャットについてリサーチ。
ajaxとかよくわからん技術やnodejsを使った非同期処理などがあると知る。
nodejsはC10K問題という問題を解決するすごいものらしく、かっこいいらしいのでこれを勉強することに。
ついでにnodejsと相性の良い、mongoDBも勉強することに。
よくわかるjavascript http://www.amazon.co.jp/dp/4839941874/
終わったら、
パーフェクトjavascript http://www.amazon.co.jp//dp/477414813X/
パーフェクトjavascriptはnodejsについてものすごく詳しく書いてあったので、とても参考になった。このあたりで、LINUXというOSを扱わなくてはいけないと気付き、自宅PCをウィンドウズから、LINUX(ubuntu)に変えた。
これはとにかく触ってなんぼでした。MySQLと感覚が違い、苦労しました。
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なども利用することに。
このへんについては、
このような解説記事がたくさんあったので、参考にさせていただきました。
■ようやく完成。
で、なんとか完成しました。
使ってみた感想や、ダメ出しなど頂ければ狂喜乱舞します。よろしくお願い致します。
■モチベーションを維持するためにやったこと。
あっさりと書きましたが、実際は失敗の連続でやる気が萎えてばっかりでした。
疲れて帰ってきて、なにもやる気の起きない時もありました。
そういう時は、とにかくサポートページのQ&Aの1文でも良いから書いてみるとか、とにかくパソコンとエディターだけ立ちあげてみるとか、していました。
ものすごーく覇気のない目でキーボード打ち続けていましたが、それでもなんとか完成することができました。惰性だろうとなんだろうと、少しずつは進むのだとわかりました。
やはり1から完全自作をするのは無謀だった。でも、プログラムをやったことのない素人でも約一年頑張ればそれなりのSNSもどきを作ることができた。
これも先人たちの作ってくれたフレームワークや様々なツール、そして参考書などのおかげ。
私のようなアホでも頭の良い人の力を借りればなんとかなりました。ありがとうございます!
そしてプログラムは一人でも出来るので、私のように非コミュでも楽しめる素晴らしい趣味である。
■現在。
今はRubyに夢中です。くり返し処理がすごくきれいにかけるので素敵な言語だと思っています。あと、javascriptも面白いので毎日いじくって遊んでいます。PHPももちろん触っています。
非コミュはあいかわらずですが、プログラムが楽しいので前より幸せです。
使用言語 PHP,Javascript