Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

9,597 views

Published on

JJUG CCC 2015 Fall m3

Published in: Technology
  • Be the first to comment

プログラム初心者が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. ご静聴ありがとうございました

×