Django! BizOpsのフレームワークとして検証を始めました。

Django! BizOpsのフレームワークとして検証を始めました。

お休み宣言したばかりではありますが、今週末の作業について、備忘録がてらに投稿しておきます。

DevOpsというワードについて知っている方も多いかと思いますが、もともとは、システム開発の世界で開発側と運用側をシームレスに連携させ、品質を確保しつつ、デリバリーサイクルを短縮するためのプラクティスとツールセットでした。しかし、昨今では、xOpsという言葉が登場しているように、Ops(Operations)は、単なるシステム運用ではなく、ビジネスをドライブするためのIT運用という捉え方になってきています。

具体的な例をあげると、CustomerOpsであれば、従来型のマーケティング手法からカスタマージャーニーを起点とするデジタルマーケティングを活用し、ビジネスの質とアクションサイクル短縮を同時に高めるための、プラクティスとツールセットといえます。また、RevOps(RevenueOps)であれば、マーケティングに限らずセールスやサポートの垣根を超えたITの活用で売上の最大化を狙います。

xOpsに共通して言えることは、組織や役割の垣根を越え、デジタル技術を活用することでその目的を果たそうとしていることでしょう。

さて、xOpsの話を出しましたが、似たようなトレンドとして、xTechがあります。こちらはデジタル技術を前提とした新たな切り口でビジネスデザインをしようと言う試みです。これまで対面が前提であった学校教育をオンライン化することで新たな価値を生み出したことはEdTechの代表的な例ですし、FinTechの観点で生まれた多様なサービスが、我々の金融体験を大きく変えたことは言うまでもないでしょう。

そして、この2つはデジタル技術を媒介として結合され、一気通貫のデジタルビジネスプロセスとなると考えて差し支えないでしょう。すなわち、xTech・xOps = BizOps です。具体例としては無人店舗ですかね。AI&IoTをフル活用する前提のビジネスデザインで、棚管理や受発注オペレーションも極限までデジタル化され、それらのデータ分析をビジネス改善や新たなサービス企画に活用しているはずですから。

ここで、新規ビジネス創造を以下のプロセスに分解してみます。

  1. アート:そもそも何故そのビジネスをするのか?問いの世界。
  2. デザイン:デジタル技術を前提としたビジネスデザイン
  3. インプリメント:デジタル技術を最大活用したビジネス実装
  4. オペレーション:デジタル技術を前提とした自動化による省力化とデータ分析による最適なアクション

アートの世界は今は横に置くとして、BizOpsを実現するこれからのビジネスデザインはデジタル技術が前提となり、オペレーションにより収集されるデータのフィードバックにより、サービスやビジネスそのものの改善を前提とするべきです。

こうして改めて今後のビジネス環境について考えてみると、デジタル音痴はアートの世界に足を踏み入れないと、今後は活躍の機会が限定されそうです。逆にエンジニアは目線を上げて、顧客接点などのオペレーション領域やビジネス開発領域に手を伸ばせば、活躍の機会が広がりそうです。

このような中、個人的にデザインしている新規ビジネスにおいて利用するデジタルプラットフォームやフレームワークを選定しており、今回はWebアプリケーションのフレームワークとしてPythonベースのDjangoを検証することにしました。選定理由は以下の通り。

  • AI、IoT領域のライブラリが潤沢でビジネスデザインでのシームレスな活用を期待(Pythonの特徴)
  • 統合フレームワーク(あれこれ組み合わせが不要)
  • セキュリティへの配慮(典型的なミスは例外をスロー)
  • O-Rマッピングの自動化(インピーダンスギャップにストレスを感じない(生産性が高そう))
  • 未来のある技術(雇用があり、若者の学習投資が無駄にならない)
  • 無償のオープンソース
  • Macをサポートしており快適な開発環境を構築可能(かなり個人的理由)
  • JavaScriptが嫌い
  • Railsは良いが、仲間のほとんどが日本人ではないので、日本発のフレームワークは押しつけ感が気になった。

丸一日を投じて、ローカルでの環境構築とシンプルなWebアプリケーション作成を通して、そのBizOps実現の可能性を肌で感じることができました。あとは、引き続き隙間時間でDevOps環境の構築と、分散開発環境におけるCI/CD(Continuous Integration/Continuous Deployment)プロセス、API Managementツールとの連携あたりを確認したいと思っています。(アート思考と経営学の研究にもっと時間を使わなければいけないのですが、ついつい面白いので技術に逃げてしまいがちなのです。。。)

以下は本当に個人的な備忘録です。

  • Python (3.8.x)
    • 初期インストーラー:オフィシャル(トラブル知らず) > Brew(問題なし) > MacPorts(Tclっていつの時代だ)
    • 仮想環境:virtualenv(標準で安心) > pyenv
    • エディタ&IDE:VSCode(C# w/Unityとの二刀流) > PyCharm(有償だが本気ならこれか) > vim(こだわりとして理解可能)
  • 仮想環境
    • 作成:virtualenv name_of_env
    • 有効化:source /bin/activate
    • 無効化:deactivate
  • Django
    • 仮想環境にてインストール:pip install django
    • 環境条件を残す:pip freeze > requirements.txt
    • 読み込んで別環境で再現:pip install -r requirements.txt
    • プロジェクト作成:django-admin startproject project
    • まずは動作確認:
      • # 静的ファイルを集める python manage.py collectstatic
      • # マイグレーションファイルを作成 python manage.py makemigrations
      • # マイグレーションファイルをDBに反映 python manage.py migrate
      • # 管理者権限のユーザーを作成(入力あり) python manage.py createsuperuser
      • #サーバー起動 python manage.py runserver
      • デフォルトではlocalhost:8000/ 0.0.0.0:8000でAll、IP指定も可能
      • #確認 localhost:8000/ にアクセス
      • AWS, Azure, GCPいずれもPublic IPにバインドして起動できず。開発環境のCloud Native化に向けて、なるはやでuWSGIとnginxでhttpdにバインドして、外部IPからの動作確認に挑戦。
    • アプリケーションの追加
      • ./manage.py startapp appname でアプリケーションを追加する.
      • appname/models.py にそのアプリで使用するモデル(データベースのテーブル)を記述する.
      • project/settings.pyに作成したアプリを追加する
    • データベース更新
      • アプリのmodelの変更を検出し,自動でmigrationファイルを作成 $ ./manage.py makemigrations
      • データベースを作成(テーブル追加)$ ./manage.py migrate
      • django用のスーパーユーザ作成 $ ./manage.py createsuperuser
      • 管理アプリで確認:http://localhost:8000/admin/
      • templates/adminを作成しデフォルトのdjango/contrib/admin/templatesから admin/base_site.htmlをコピーすることで管理画面のカスタマイズ可能。 
    • Viewの追加
      • appname/views.py にモデルの表示や操作(追加,編集など)を記述する.
      • 使用するhtmlもここで用意.
      • templateファイルは実験プロジェクト配置を参照。これを変えるとNotFound。課題先送り
      • appname/urls.py を記述し,urlとviewsを紐付ける
      • project/urls.pyからappname/urls.pyを読み込む.
    • パケージング
      • プロジェクトフォルダの外側にパッケージ作成用フォルダを作成
      • アプリケーションフォルダをコピー
      • README.rst, LICENSE, MANIFEST.in, setup.cfg, setup.pyを準備
      • パッケージ作成フォルダで python setup.py sdist
      • django-polls-0.1.tar.gz が生成される
    • 再利用
      • python -m pop install <パッケージPATH/file_name.tar.gz>
    • アンインストール
      • python -m pop uninstall <パッケージ名>