Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

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

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Hier ansehen

1 von 77 Anzeige
Anzeige

Weitere Verwandte Inhalte

Andere mochten auch (20)

Anzeige

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

Aktuellste (20)

Anzeige

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

×