狠狠撸

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

More Related Content

プログラム初心者が奥别产サービスをリリースして运営するまで