プログラム初心者が
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を使ってた
●
ビルドツール?知らない
●
フレームワーク?知らない
● JarやwarはEclipseのExport機能...
使ったもの
● 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)と揃えた
かったが、上手くやる方法が思いつかなかったため今
回は変更しなかった
●
考...
今現在まで
● アカウント数は10万まで増えた
● 最近だと一日に100人増えて50人減るペース
● 監視はmuninからmackerelへ変更
今現在の問題
● アカウント数が増えすぎて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」には使えないよね〜。
読める、書ける、想像できる
楽しい!!
とはいえ
壁を壊すには時間がかかる
手助けするもの
(ITも含めた)知識すべてが武器
武器
● 例えば・・・・・アーキテクチャやOS、メモリ、通信などの知識
← 大学の授業
● 例えば・・・・・ミドルウェアの扱い、OS、セキュリティ
← Webサービス運営
●
例えば・・・・・実際のアプリケーションに関すること
← アプリ開発、...
武器
● ITに関する会社のこと、ニュース
ファストサー(ry、Google、Microsoft
● ITに限らない世の中のこと
ここまでくると何が影響を及ぼしてるかわからない
のでとにかくいろんなものを見たり聞いたりする
初心者のみなさん
きっといつか壁を壊す日が来ます
その時まで
頑張りましょう
そして楽しい技術者ライフを!
ご静聴ありがとうございました
プログラム初心者がWebサービスをリリースして運営するまで
プログラム初心者がWebサービスをリリースして運営するまで
Upcoming SlideShare
Loading in...5
×

プログラム初心者がWebサービスをリリースして運営するまで

942
-1

Published on

JJUG CCC 2015 Fall m3

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
942
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

プログラム初心者がWebサービスをリリースして運営するまで

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

    Clipping is a handy way to collect important slides you want to go back to later.

×