未熟学生エンジニアのブログ

プログラミング・Web開発をする大学院生のブログ

【開発参加検討者向け】フリマサービス「ホクマ」の技術構成

今回は、北大IT研究会メンバーが開発・運営する「ホクマ」の技術構成についてお話しします。

技術的な話に興味がないという方はブラウザバックしてください。

今回はホクマの開発を引き継ぎたい方に向けての記事になります。

ホクマとは

まず、ホクマとは何なのか、知らない方に3行で説明します。

  • 北大生だけが使えるフリマWebサービス
  • 使わなくなった教科書などが売り買いされている
  • 直接会って渡すので完全手数料0。高く売れる、安く買える!

もっと知りたい方は以下の記事をお読みください。

hu-jagajaga.com

技術構成図

f:id:swiftfe:20190420175841j:plain
ホクマ技術構成図

一つずつ解説

1. Django

  • これは何?:Python製のWebアプリケーションフレームワーク(WAF)。ほぼ全ての処理はまずここから始まる。
  • なぜ必要?:サーバー側でPythonプログラムを動かすために必要。商品情報を保存するためにデータベースにアクセスしたり、ブラウザにHTMLを返したりする。ここにhtml,css,jsも含まれる。

2. PostgreSQL

  • これは何?:データベース。データベースを管理するシステムおよび、データベースを操作する言語。商品データを保存・更新するとき等に使う。
  • なぜ必要?:これがないとユーザが新しいデータを追加したり更新したりできない。また、効率よく保存したデータを検索したりするために必要。

3. Nginx

  • これは何?:Webサーバ。ユーザ(クライアント)からのリクエストをDjangoに伝え、リクエストを受け取ったDjangoから返されたHTML・CSSなどのファイルにメタ情報を追加した情報をブラウザに返す。ユーザからのリクエストをうまくさばくための色々な機能ももっている。
  • なぜ必要?:複数のユーザからの同時接続に耐えるために必要。HTTPS通信のために必要。ブラウザ側に快適な動作をさせるためにDjangoから受け取った情報に何かを追加したり加工したりする。

もっと詳しく知りたい

これらの記事を読むために必要な予備知識:DjangoなどのことをAPサーバー(アプリケーションサーバー)、NginxなどのことをWebサーバーと呼ぶことがあります。

4. Bootstrap(4)

  • これは何?:css・jsラリブラリ。Webページの見た目や使いやすさを向上させるために必要。htmlのclass名を指定するだけで、cssやjsを書かずに便利な機能をつけることができる。
  • なぜ必要?:見た目をかっこよくさせるために必要。PC・スマホ両対応も簡単にできる。Webページでインタラクティブな操作は必須だが、これを簡単に作れる。

5. Let's Encript

  • これは何?:HTTPS通信をするための証明書の管理をしてくれるツール(無料)。コマンドを使って証明書を更新できて便利。
  • なぜ必要?:ブラウザから送られるユーザのパスワードなどを暗号化して、通信路上で盗まれてもわからないようにする通信(HTTPS通信)を行うために必要。

6. Amazon AWS Sinple Storage Service(S3)

  • これは何?:画像やCSS・JSなどを保管しておく場所。不特定多数用のDropboxみたいな感じ。
  • なぜ必要?:画像などの容量が多いものをこのように別サーバに保管しておくことで費用を抑えるため。また、CloudFrontなどの別AWSサービスと連携させ、ユーザの位置と近いサーバーに画像などのファイルを置いて物理的にアクセス速度を高めるためにも必要。

7. Linuxサーバ(ConohaVPS)

  • これは何?:いろんなプログラムを動かすためのOS及びコンピュータ本体。
  • なぜ必要?:1,2,3など複数のプログラムを並行的に動かすために必要。自分のPCではないコンピュータで外部公開するという意味でも必要。

8. (Optional) Docker

  • これは何?:VMよりも軽量な仮想環境を作成できるツール。本番用サーバーと本番の一個手間サーバ(QAサーバー)、ローカルPCなどでほぼ同じ環境をコピーして使うことができて便利。
  • なぜ必要?:本番用サーバーとQAサーバー、ローカルPCなどでほぼ同じ環境をコピーして使いたいときに必要。仮想環境なので、開発初期に色々試して失敗してもすぐ消してやり直したりできる点も良い。

9. postfix

  • これは何?:メールの送受信用のツール。
  • なぜ必要?:ユーザへの通知をメールで送ったり、お問い合わせメールを受け取ったりする際に利用します。

おまけ

CI(継続的インテグレーション)ツール:CircleCI

  • これは何?:Djangoなどのプログラム修正したときに自動的にテスト(プログラムが意図した動作をするか自動確認すること)などを行ってくれるツール。
  • なぜ必要?:ホクマのように日々改善を続けるサービスに対してバグがないか改善のたびにチェックするために必要。

GitHub

  • これは何?:Gitというソースコード自体と更新差分を管理するツールをweb上で操作できる+タスク管理・コードレビューもできるwebサービス
  • なぜ必要?:ホクマのように日々改善を続けるサービスに対して複数人で更新状況を管理しやすくするために必須。使っていない企業は時代遅れ扱いされるが授業では習わない。

終わりに

ホクマはある程度saleorというリポジトリを意識した構成にしており、割とまともなサービス構成になっているかと思います。ホクマをまともに理解し運用・改善し続けることができれば、まともな個人開発経験があると言ってもよいのではないかと思っています。ホクマはまともに稼働してくれる開発・運用メンバーを募集しています。興味ある方はぜひご連絡ください!

もっと知りたい方へ

もう少し細かく書いたシリーズがあるので、そちらもよろしければご覧ください。

swiftfe0.hatenablog.com

連絡先