システム開発

Web System

hero

ITエンジニアの基礎 – 初心者が知っておくべき全体像

 

編集中です。エンジニアになるための考え方や知っておくと良いことなどを更新していきたいと思います。

 

どのようなエンジニアになりたいか

・フルスタックエンジニア

・DevOps

・CTO

・技術顧問

など。

これらは、エンジニアのゴールにすることも多い職種です。

 

 

質問の仕方について

自分で調べることも、質問して教えてもらうことも大事です。

質問すると相手の時間を使います!

これが気になってなかなか質問できない方もいるかと思います。

 

質問の仕方を工夫しよう

・できる範囲で調べてから質問してみる

全く知識がないと教えてもらうときに理解するのが難しい。ある程度調べてから質問しよう。

ただし、時間は無限にあるわけではありません。15分~1時間調べても分からない場合は質問しよう。

 

・チャット問題ないならチャットで聞く

教えてくれる人の自由なタイミングで答えてもらえる。テキストで残るのでメモに失敗しない。
テキストだと大きなコストがかかるときは、ビデオ通話などが良い。

 

・伝え方

「うまくいきません」だと何も分からないので、伝え方も工夫しましょう。

  1. 実現したいこと
  2. 実現するために自分が調査や試した内容とその結果
  3. 調べた内容や資料
  4. エラーなどあればその内容
  5. 原因だと思われそうな箇所

 

・調べ方も分からないなら、思い切って聞く

 

また、回答をもらったらお礼と、解決したら報告をきちんと行うようにしましょう♫

 

 

継続的な開発前提の技術選定

マイクロサービスアーキテクチャ

各システムモジュールを独立したサービスとして構築することで、特定の機能追加や変更が他機能に影響を与えにくくなります。
また、システムの拡充や機能追加も容易になります。

 

APIファーストアプローチ

既存のシステムや他のシステムとの連携強化を見越して、APIを利用しやすい設計を行います。
GraphQLのようなAPIも柔軟にデータを取得できるので検討に値します。

 

スケーラブルなインフラ

クラウドプロバイダー(AWS、GCP、Azureなど)を利用し、オートスケーリングやロードバランシングなどでシステムの負荷分散を自動化します。
これにより、負荷が高まってもシステムが安定稼働しやすくなります。

 

 

データベース設計とパフォーマンス対応

インデックスの最適化

保存したデータや例えばレポート作成に頻繁に参照されるフィールドに適切なインデックスを付与し、読み取りパフォーマンスを高めます。

 

パーティショニング

データの蓄積量に応じてテーブルのパーティショニングを検討します。
例えば、データの保存年月や結果IDを基準にして分割することで、データ量が増えてもパフォーマンス劣化を抑えることができます。

 

キャッシュ機構の導入

頻繁に利用されるデータに関してはRedisなどのインメモリキャッシュを活用し、データベースの負荷を軽減します。

 

非正規化テーブル

レポート生成に必要なデータを非正規化して保存するテーブルを別途用意し、レポート作成時にクエリ数や結合を減らすことで処理速度を向上させます。
 

 

データ統合と集中管理

複数のシステムで収集したデータを別のシステムに統合し、集中管理することで、以下のような効果を得ることができます。

効率的なデータアクセス:データが一箇所に集約されていることで、アクセスや分析がしやすくなり、各システムごとの確認や抽出作業が不要になります。

データ品質の向上:統一されたフォーマットでデータを扱えるため、データ品質や一貫性を確保しやすくなります。

 

ETL(Extract, Transform, Load)ツール

Extract(抽出):複数のシステムや外部データソースから必要なデータを抽出します。

Transform(変換):新システムのデータフォーマットや構造に合わせてデータを変換し、クレンジング(不要データの削除やデータ修正)を行います。

Load(ロード):最終的に新システムのデータベースやデータレイクにロードし、一元管理します。

AWS GlueやApache NifiといったETLツールを利用することで、データ処理をスムーズに行うことができます。
これらのツールはスケジュールを設定して定期的に実行することもでき、データ更新を自動化できます。

 

データパイプライン

データパイプラインは、リアルタイムでデータを処理・転送する仕組みです。
Apache KafkaやAWS Kinesisといったストリーミングツールを使うことで、リアルタイムに各システムのデータを収集・統合することが可能です。

 

 

データレイクの構築

データレイクとは、構造化データ(例:CSVファイルやデータベースのテーブル)、半構造化データ(例:JSONやXMLファイル)、非構造化データ(例:テキストや画像、音声ファイル)などのさまざまなデータ形式を一箇所に保存するためのデータストレージです。

データ形式の柔軟性:データの変換や整形を必要とせずにそのまま保存できるため、今後新たなデータ形式が増えても簡単に追加できます。

データ量の柔軟な拡張:データレイクはスケーラブルなストレージとして、大量のデータも低コストで蓄積できます。

横断的な分析:異なるシステムから収集したデータを横断的に分析することが可能になります。たとえば、複数のアンケート結果を基にしたトレンド分析やユーザーの満足度調査などが容易になります。

 

データレイク構築における技術例

AWS S3:Amazon Web ServicesのS3(Simple Storage Service)は、データレイクとしての機能を持つストレージで、さまざまなデータを柔軟に格納できます。AWS GlueやAthenaと連携することでETLやクエリ処理も行えます。

Azure Data Lake Storage:Microsoft Azureのデータレイクストレージで、ファイルやデータの大規模なストレージ環境を提供し、ビッグデータの分析に適しています。

Google Cloud Storage:Googleのクラウドストレージであり、Google BigQueryとの連携により、大規模なデータ分析が可能です。

 

 

アジャイル開発

機能の拡張や変更が頻繁に発生する可能性があるため、アジャイル開発手法が有効です。短期間でのリリースとフィードバックを重視し、要求に応じて柔軟に対応します。

 

 

CI/CDの導入

開発からデプロイまでのパイプラインを自動化し、変更が速やかに反映される仕組みを整えます。
これにより、継続的な開発の負担を軽減しつつ、品質の担保ができます。

 

 

RFP

RFP(Request for Proposal)は、日本語では「提案依頼書」と訳され、特定のプロジェクトやサービスに対してベンダーやパートナーからの提案を募るための公式文書です。
発注側が要求するサービスや製品の詳細、予算、スケジュール、評価基準などを明確に記述し、それに基づいて提案書を提出してもらうことで、最適な提案者を選定するプロセスに利用されます。

 

RFPの目的

RFPの目的は、発注側がプロジェクトの要求や仕様を詳細に提示することで、提案者(ベンダー)に正確な見積もりや実現可能なソリューションを検討させ、最適なパートナーを選ぶことです。
多くの場合、RFPは企業や組織が新しいプロジェクト、特に複雑なITシステム導入や開発プロジェクトにおいて使われます。

 

RFPに含まれる内容

・プロジェクトの概要
・具体的な要求・仕様
・スコープ(プロジェクトの対象範囲)
・予算とスケジュール
・評価基準
・契約条件

 

発注側が自身の要求を明確にする機会となったり、複数の提案者から同じ基準で提案を受けられるため、比較や選定が簡単になるという利点がありますね。

RFPは具体的かつ包括的に書く必要がありますが、詳細すぎると提案者の創意工夫を制限してしまう可能性もあるため、バランスが重要です。