狠狠撸
Submit Search
プログラム初心者が奥别产サービスをリリースして运営するまで
?
12 likes
?
11,172 views
T
Tomoaki Iwasaki
Follow
JJUG CCC 2015 Fall m3
Read less
Read more
1 of 77
Download now
Downloaded 22 times
More Related Content
プログラム初心者が奥别产サービスをリリースして运営するまで
1.
プログラム初心者が Webサービスをリリースして運営するまで
2.
自己紹介 ?岩崎 知亮/@MulticolorWorld ?福岡の某大学の学生 ?プログラマー(アルバイト)やってます そこではJavaとかSQLとか書いてる ?個人でWebサービスとかも
3.
自己紹介 ?岩崎 知亮/@MulticolorWorld ?福岡の某大学の学生 ?プログラマー(アルバイト)やってます ?個人でWebサービスとかも
4.
運営してるWebサービス ● ツイ廃あらーと https://twihaialert.net/ Twitter連携サービス 日付変更時に前日のTweet数を通知 など 無料 【祝】登録アカウント数10万突破 Javaで書いてます
6.
Nginx アプリケーション (SpringBoot) MySQL cron処理 (こっちもJava) OSはFreeBSD →OpenSUSE
7.
User TwitterAccount 1:多 ● Userは登録してる人一人につき1つ ●
アカウントを複数持っている人がTweet数を合算して 集計できるように1:多でTwitterAccountを持つ
8.
今日する話 ● ツイ廃あらーとについて ● 無料でサービスを運用すること ● 大学の話
9.
ツイ廃あらーとの话
10.
運営を始めたきっかけ ● 自分で一から開発したわけではない ● Twitterのフォロワーだった先輩から譲り受けた ● そのとき自分は2年生、Javaを勉強し始めて1年 ちょっと。 ●
ユーザー数2万くらいだった
11.
最初のツイ廃あらーと ● Web部分はPHP ● cron処理はJava ●
あとcssとかもないタダのhtmlな登録画面だった (資料に使おうと思ったらもう残ってなかった)
12.
引き継いで最初にやったこと ● とりあえずWeb側とcron側をJavaで書き直す PHPを読むための勉強はやった
13.
まずはこれ
14.
Eclipse
15.
開発環境 ● Javaの初心者向けのWebページはやたらEclipse を推していた ● 自分もその時点ではEclipseを使ってた ● ビルドツール?知らない ● フレームワーク?知らない ●
闯补谤や飞补谤は贰肠濒颈辫蝉别の贰虫辫辞谤迟机能で作ってた
16.
使ったもの ● Twitterを利用する部分 → Twitter4j
(http://twitter4j.org/) ● Webの構築 → Servlet/jsp ● ORマッパー → Hibernate
18.
ひとまず完成 ● デザインはできる友人に丸投げ ● これでとりあえず1年くらい動かしてた ● 不具合は意外となかった ● cron部分はThreadクラスを作って並列で回してた (まだスレッドプールの存在を知らなかった)
19.
動かしてた間 ● 監視はmunin ● アカウント数は4万くらいまで増えた ● 不具合は無いけど新機能要望は結構来てた (新規登録はあるけど削除とかはないような状態 だったので)
20.
もう一度リファクタリング ● 動かしている間にSpringBootを知った ● もうちょっとイカしたフレームワークなり何なりが使 いたかった(Servlet/jspだけなのは流石に???) ● ついでにビルドツールも使いたい
21.
このリファクタリングを始める直前くらいに を手に入れて開発環境をそっちに移した (今からだともう戻れる感じが0)
22.
リファクタリング ● フレームワークはSpringBoot Spring MVC
+ Spring Data JPA + Thymeleaf ● 簡単すぎてびっくりするくらい
23.
使ったツール ● ビルドツール maven入れた なぜ今まで知らなかったのかと公開するレベル ● ソースコード管理 git(GitHub)を導入 なぜ今までしらなかったの(ry
24.
cron部分 ● Threadクラスを使っていたのをExecutorServiceを使 うように変更 ● データベースの扱い方をWeb(SpringBoot)と揃えた かったが、上手くやる方法が思いつかなかったため今 回は変更しなかった ● 考えられる方法 ?データベースを扱う部分をモジュールで切り出してjar 化 ?cronを行う部分をSpring
叠补迟肠丑を使って奥别产と统合
25.
今現在まで ● アカウント数は10万まで増えた ● 最近だと一日に100人増えて50人減るペース ●
监视は尘耻苍颈苍から尘补肠办别谤别濒へ変更
26.
今現在の問題 ● アカウント数が増えすぎてcronが追いつかない cronは30分に一回、10万アカウント、並列度100 →1アカウントにつき1.8秒??????? ● 特に1日分のTweet集計を行う0:00時のcronの負 荷が高くエラーが出ることも
27.
今現在の問題 ● サーバー代(維持費) 現在はさくらのVPS(3000円ちょっと)、あとドメイン 代とSSL証明書代 サービス自体は無料なのでこれ以上サーバーのス ペックを上げるのはちょっと????? 一度登録すれば動くためうまく費用を回収するプラ ンが思いつかない
28.
こういう部分でハマった ● 文字コードの概念を理解してなくてソースコードを SJISで保存して実行していた → 通知の文章が化ける ● データベースに慣れておらず、バックアップを取ろう としてテーブルをdropした(え)
29.
こういう部分でハマった ● VPS特有の性質 一時期、夜間のcronだけやたらと時間がかかること があった。 → VPSはリソースを他のユーザーと共有してつ かっている →
夜间パッチのせい?
30.
こういう部分でハマった ● DNSやTwitterAPI側が落ちた時にログインやcron でエラーが出る → 自分じゃどうしようもないので告知だけ (それでも怒るユーザーはいる)
31.
こういう部分でハマった ● プログラムのバグなどでアプリケーションサーバや OS自体が死ぬ → 学校にいる時じゃ対処できないので家に帰るま で死んだまま 冗長化するような余裕は無い()
32.
无料サービスを运営することの话
33.
自分は ● 紹介したツイ廃あらーと ● 他にも幾つか同じようなWebアプリケーションを運 営してる ほぼTwitter関連 主にTwitterをよく使うのでTwitter関連のアプリケー ションのアイデアが思いつきやすい
34.
利点 ● プログラミングの入り口としてとても良い プログラミング言語の勉強はしたけど、何を作って どういうふうに公開したら良いのかは分からない人 も多い。 →Webアプリケーション,PaaS
35.
利点 ● インフラからアプリケーションまでの幅広い部分を (小規模であるが)扱える OSのインストール ミドルウェアの管理 セキュリティ関連 → 実際にやってみないとわからなかったことも多 かった
36.
利点 ● 実際にサービスを運営する心構えができた データベースの中にユーザーが登録したデータが 入っているのを見ると緊張する セキュリティに対する考え、ユーザーに対する心構え
37.
逆のこと ● 金はかかる 費用が回収できるようなサービスであれば良いけ ど、ユーザーが増えればそれなりの値段になってく る 自分は費用は勉強代と思うようにしている
38.
逆のこと ● 仕事で書くのではない 作りたい(その機能が欲しい)から作る モチベーションは保ちにくいかもしれない
39.
逆のこと プログラマーとしてアルバイトに入る前 → 余った時間でいくらでもプログラミングやってた (勉強) アルバイトを始める → 会社でプログラムを書くようになったので家で書 く量は結構少なくなった
40.
大学とプログラム初心者への话
41.
※自分の体感です ※すべての人に当てはまるわけではありません
42.
自分の所属している学科 ● 入学した時は電気と情報が一緒になっている ● 2年次に上がるときに電気と情報が課程にわかれ る 1年次は同じ授業を受けてる
43.
情報課程 ● 1年次 初めてのプログラミング(言語:Scheme) 数学 電気回路 論理学の基礎
44.
情報課程 ● 2年次 アーキテクチャ OSのしくみ 数学 論理学 情報理論 プログラミング(C言語、Java)
45.
情報課程 ● 3年次 通信 離散数学 確率 統計数学 実験 →
46.
情報課程 ● 実験 低レベルな層から高レベルな層へ順番にやる ブレッドボードで加算器 → それをFPGAで再現 → FPGAで16bitCPUを実装
→ アセンブリとC言語でOSの機能を実装
47.
情報課程 ● 4年次 卒論 自分は来年やります
48.
情報課程 ● 実際のプログラミング言語に触ることよりも座学が 圧倒的に多い その代わり3年の実験はがっつり (週6限分 = 9時間)
49.
自分が初心者だったころの話と 初心者に向けて
50.
勉强しはじめの顷
51.
なにもわからない
52.
わからない ● いわゆる「何がわかってないかわからない」状態 初心者用の入門ページをみてもつながりがわからな い 当然Javadocなんかを読んでも「何が書いてあるか」 がわからない (そもそも存在に辿りつけない) →「各プログラミング言語には仕様が書いてあるリ ファレンスのようなものがあるはずだ」という理解が ない
53.
ちょっとわかってきた
54.
ちょっとわかってきた ● コピペしたコードが何を書いてるかがわかる ● 「そのプログラミング言語」の仕様がなんとなくわ かってくる ● 「そのプログラミング言語」の仕様書の中をなんと なく探せる
55.
ちょっとわかってきた ● 自分のコードがどんなふうに実行されるのかはわ からない ● 他のプログラミング言語のことはまだわからない ● 関数型とかオブジェクト指向とかのことはまだわか らない ● フレームワークつかったりとかはまだ難しい
56.
ここから次の段階までが時間がかかる (自分は3年半くらいかかりました)
57.
けっこうわかる ● 自分の書いたコードがどのように実行されるのかが わかる ● フレームワークの仕組みやデザインパターンなどの 知識がつく ● 「hoge」を達成するためには「fuga」なコードを書く というパターンが身につく → 達成するべき事柄に対応するコードが漠然とでも 思い浮かべられるようになる
58.
すごくわかる ● このレベルになれるのはいつになること か????????????
59.
「ちょっとわかる」 と 「けっこうわかる」 の 壁
60.
壁を壊す前 ● いろんな雑多な知識は頭のなかにある プログラミング言語、OS、アーキテクチャ、通信、数 学、論理学、統計学 etc…… ● あるけど、つながっていなくてふわふわしている感じ
61.
これが ある時前触れもなく
62.
すべて一直线に繋がる日が来ます
63.
つながると???????
64.
壁を壊した後 ● 結構わかる状態になる 自分の知っていることだけでなく、自分の知らない 事柄に出会っても想像できるようになる。 (例) Hogeフレームワークの新しい機能Fuga 多分Hogeのこの部分の補強につかわれるんだろう とか、Hogeのこの機能と組み合わせると良さそうだ なとか
65.
壁を壊した後 ● 逆に、今自分が持っているもので、「何を達成不可 能」なのかにも考えが行くようになる (例) ● きっとこのライブラリは「Hoge」という問題を解決す るためのものだから「Fuga」には使えないよね?。
66.
読める、书ける、想像できる
67.
楽しい!!
68.
とはいえ 壁を壊すには時間がかかる
69.
手助けするもの
70.
(滨罢も含めた)知识すべてが武器
71.
武器 ● 例えば?????アーキテクチャやOS、メモリ、通信などの知識 ← 大学の授業 ●
例えば?????ミドルウェアの扱い、OS、セキュリティ ← Webサービス運営 ● 例えば?????実際のアプリケーションに関すること ← アプリ開発、日々のプログラミング もちろんこれに限りません
72.
武器 ● ITに関する会社のこと、ニュース ファストサー(ry、Google、Microsoft ● ITに限らない世の中のこと ここまでくると何が影響を及ぼしてるかわからない のでとにかくいろんなものを見たり聞いたりする
73.
初心者のみなさん
74.
きっといつか壁を壊す日が来ます
75.
その時まで 頑張りましょう
76.
そして楽しい技术者ライフを!
77.
ご静聴ありがとうございました
Download