【要件検討】Windowsでドキュメント管理するのが面倒くなったので、LAMPサーバにした

※2024/2/9時点での検討内容を更新しました※
※現状として、実施済みのものは■、実施予定は□で示しています。

---

# 初めに
QOLを上げるため、自宅内にプライベートサーバを構築します。
前提として何がしたいのか要件整理をします。
また、日々ニーズが変わるため、要件を定期的に記録していくのが目的です。
（※構築過程は、別な記事にまとめています。）

---

# 背景
## 明細の管理をexcelからデータベースに移行したい
* 住宅ローンと給与明細とQR決済の月額支出をはじめとした明細管理をExcelで行っています。
* しかし、グラフや書式設定の追加が多くなり、メモリ不足で度々フリーズしてしまう状況が続いていました。
## メモ内容をファイルではなく、CMSで一元管理したい
* 知ったことのメモが一元管理されていないため、wordpressへの移行を行いました。
* wordpressはバージョンアッによる運用の煩雑性があるため、2022年以後利用頻度が少なくなっており、代替策を検討しています。（Python製のDjango CMSを検討中）
## 外部サイトのオープンデータを活用し、QOL向上に役立てたい
* QOL向上のため、外部サイトのオープンデータを活用したいです。
* 機械学習のコーディングを行えるサービスを利用し、データ取得と可視化を行いたいです。
## どこでも使用できるようにしたい
* 自宅内サーバといいつつも、将来的には災害時にサーバを持ち運びできるようにしたいです。
（災対環境を本番環境に昇格させるのが一般的なのですが、人間の手で拠点を移動させることで、自身の環境下でも運用する思想です。）
## <b><a>要は、MicrosoftOfficeレス、分析自動化、持ち運びを可能をするため、軽量LAMPサーバを作成するのが目的です。</a></b>

---

# 要件検討
そもそもとして、今の現状と課題を整理しました。

## 現状の管理方法
### ◎給与分析.xlsx
* 現状：月次の給与明細を記入し、収入額、控除額、手取額を記載しています。
* 課題：分析のたびにExcelからグラフを作る必要があるため、手間がかかっています。

---

### ◎住宅ローン予測表.xlsx
* 現状：住宅ローンが月々どれくらいかかるかを金利に応じて月次支出を計算しています。
（現在の借入銀行での返済額もあれば、有り得ない高金利のパターンなど、数10種類の変動金利パターンでシミュレーション結果をExcelで計算しています。）
* 課題：金利変動パターンが増えることにより、グラフ作成時にフリーズします。

---

### ◎サーバ構成図.pptx
* 現状：仮想マシンを数中種類構築していて、どの仮想マシンかが分からなくなってしまったので一覧化しています。
* 構成図はパワーポイントで管理しています。
* 課題：仮想サーバのミドルウェアのパラメータが一元管理できていないです。
また、ネットワーク含めた構成図が作れていないです。

---

### ◎ライフプランニング.xlsx
* 現状：月の支出を出しています。
* 課題：2022年4月以降、メンテナンスできていないです。

---

### ◎株価分析.xlsx
* 現状：未実装なので、なにも管理していないです。
* 課題：QR決済のポイント投資をしていますが、変動状況をウォッチできておらず、株価チャートをうまく利活用できていないのが現状です。外部サイト（複数サイトのオープンデータ）から取得し、移動平均線を解析して、買いなのか・売りなのかを判断するツールが必要があります。
（すでにアプリであると思いますが、勉強のために独自でつくりたいというのも課題です。）

---

## 持ち運びについて
* データセンターや社内でサーバ管理することもあれば、パブリッククラウドでサーバを管理すると思いますが、災害時は環境切替を行うことでサービスを継続するシステムが多いと思います。
* 一方で本記事では、個人利用を目的としたサーバのため、コストのかかることは不可能です。
* 自宅のWindowsPC上に仮想マシン（LinuxOS）を構築し、災害時に電源をオフにし、避難先でも使えるようなコンセプトにしたいです。
（外出時の利用において、セキュリティ要件を遵守しながら運用するために、現在はWindowsPCおよびLinuxOSを搭載した仮想マシンにおいてファイアウォールを実装しています。しかしながら、ミドルウェア自体のセキュリティ管理に関しては、検討が必要です。）

---

# 設計検討
## ◎給与分析.xlsx
* 方針
    * ■月々の給与を挿入するために、クライアントでデータをインポートします。
    * □本格的には、javaアプリケーションを作成して、データ投入用の画面を作成して、APIを作成します。
    * □Web入力画面からデータ挿入できるAPIを作ります。
* 詳細
    * ■給与明細テーブルを作成します。
    * ■給与明細テーブルにa5m2を使って、データを挿入します。
    * ■BIツール（Metabase）で可視化します。
    * -javaアプリケーションを用いたデータ挿入を実装します。
    * -Web入力画面をPythonのFlaskもしくはDjangoで実装します。ここは優先課題とします。

---

## ◎住宅ローン予測表.xlsx
* 方針
    * ■住宅ローンシミュレーションをデータベース化します。
    * ■可視化ツールを導入します。
* 詳細
    * ■住宅ローンシミュレーションテーブルを作成し、MySQLでデータベース化します。
    * ■金利毎にテーブルを作成します。
    * ■金利毎のテーブルを内部結合し、金利変化の返済シミュレーションを可視化します。
    * ■BIツール（Metabase）で可視化します。
    * □テーブル検索処理の問題点の改善
       * 複数テーブルの内部結合で時間がかかってしまう事象が発生しています。
       * 結合処理を使わず、金利パターンごとに計算結果を値としたカラムを作成します。
       * これをビューで定義することで、データ検索のパフォーマンス改善を行います。

---

## ◎サーバ構成図.docx
* 方針
    * 2024年度更新⭐︎
    * □データベース一元管理するため、サーバ一覧テーブルを作成します。
    * □パスワードは暗号化された値で管理します。
    * □サーバ構成図はファイル管理ではなく、mdファイルで管理し、パスワードで暗号化します。
* 詳細
    * ■サーバ一覧についてはデータベース内にサーバ一覧専用のテーブルを作成します
    * ■テーブルのデータは暗号化された値で格納します。
    （データを暗号化する方法は検討中です。）
    * ■データベースから参照する場合、特殊な復号方法でデータを閲覧できるようにします。
    （クライアントから直接データが解読されないようにします。）
    * □サーバ構成図は、下記の通りに多段階でパスワード認証を設定します。
        * ①Apacheのベーシック認証の設定
        * ②mdファイルのダウンロード時のパスワード認証設定

---

## ◎ライフプランニング.xlsx
* 方針
    * ◾QR決済のデータと、電気ガス水道のアプリのcsvデータをにインポートします。
    * ■住宅ローン予測と給与分析とを考慮して、収支結果を計算し、BIツールで可視化します。
* 詳細
    * ■csvファイルをスマホからアップロードします。
    * ■アップロードファイルをデータベースにインポートできるような形式に加工します。
    * ■加工したファイルをデータベースにはmysqlもしくはmongodbにインポートします。
    * ■住宅ローン予測と給与分析用のテーブルを内部結合し、
    収支計算結果をデータベースのビューとして表示します。
    * ■BIツール（Metabase）で可視化します。

---

## ◎株価分析.xlsx
* 方針
    * 株価チャートのソースを選定します
    * □株価のチャートのデータを、構築したサーバに取り込みします。
* 詳細
    * □外部の株価チャートをエクスポートします。
    * □エクスポートファイルをデータベースにインポートできるような形式に加工します。
    * □加工したファイルをデータベース（mysql）にインポートします。
    インポート先は株価チャートを収集するために用意した専用のテーブルとします。
    その際に移動平均線を出します。
    * □BIツール（Metabase）で可視化します。

---

## 接続方法については後ほど更新します。

---

# 構築・運用状況
## 構築状況
構築の状況や運用の状況などは下記に記載しております。
（2023/12/2時点ではCentOS7.5からAlmalinux8.4に移行し、8.4から8.9へアップデート中の状況です。）

https://qiita.com/t_kyn/items/91f6dbb7c3ef938b9377

---

## 後述
* Metabaseを使用した結果2000件以上のデータを参照できない点、Javaのメモリ使用量が大きく、システム全体のオーバーヘッドが生じる問題が発生しました。
* Metabaseはユーザインターフェースがよい反面、カスタマイズが難しいため、
アーキテクチャ自体もk3dに変更し、Pythonを用いたBIツールを利用するようにしています。

https://qiita.com/t_kyn/items/01b799d0fdb1f3686f81

https://qiita.com/t_kyn/items/18d299b17c2b3d6283ca

https://qiita.com/t_kyn/items/07ca9a456915a914f4d4

参考：

https://www.learning-nao.com/?p=3915