セキュアなコーディングプラクティスと脆弱性対策
現代のソフトウェア開発において、セキュアなコーディングプラクティスは極めて重要です。
これにより、ソフトウェアが攻撃者による悪意のある操作から保護されるだけでなく、ユーザーのデータやシステムの整合性も確保されます。
本記事では、セキュアなコーディングプラクティスと脆弱性対策について詳細に説明します。
2024年7月18日
セキュアなコーディングプラクティスと脆弱性対策
現代のソフトウェア開発において、セキュアなコーディングプラクティスは極めて重要です。
これにより、ソフトウェアが攻撃者による悪意のある操作から保護されるだけでなく、ユーザーのデータやシステムの整合性も確保されます。
本記事では、セキュアなコーディングプラクティスと脆弱性対策について詳細に説明します。
記事を読む
2024年7月12日
フロントエンドフレームワークの選定ガイド
フロントエンドフレームワークは、ウェブアプリケーションの開発を効率化し、保守性や拡張性を高めるために欠かせないツールです。
しかし、多数のフレームワークが存在するため、適切なフレームワークを選定することは容易ではありません。
本記事では、主要なフロントエンドフレームワークの特徴と、選定時に考慮すべきポイントを詳しく解説します。
記事を読む
2024年6月21日
データベース設計の原則におけるトレンド10選
データベース設計は、データの効率的な格納、管理、アクセスを実現するための基本的なプロセスです。
技術の進歩と共に新たな手法やトレンドが登場しており、これらを取り入れた設計が求められています。
本記事では、トレンドを含むデータベース設計の原則を詳細に説明します。
記事を読む
2024年6月19日
ソフトウェア開発における技術債務とその管理方法
技術債務(テクニカルデット、Technical Debt)とは、ソフトウェア開発において、短期的な利益や急速なリリースを優先するために、最適でない解決策や不完全な設計、コーディングの手法を採用することで生じる技術的負担を指します。
記事を読む
2024年6月13日
テスト自動化と継続的インテグレーションの実践
ソフトウェア開発において、品質を確保し、効率的な開発プロセスを実現するためには、テスト自動化と継続的インテグレーション(CI)が不可欠です。
これらのプラクティスは、コードの変更が迅速に検証され、問題を早期に発見することを可能にします。
本記事では、テスト自動化と継続的インテグレーションの実践について説明し、その利点と導入方法、そしてベストプラクティスを紹介します。
記事を読む
2024年6月7日
機械学習モデルの開発とデプロイメント
機械学習(ML:Machine Learning)はデータから学習し、予測や意思決定を自動化する技術です。
現在、多くの業界で機械学習モデルが活用されており、効率化や高度な分析を実現しています。
この記事では、機械学習モデルの開発からデプロイメント(本番環境に展開をすること)までのプロセスとベストプラクティスについて記載します。
記事を読む
2020年7月30日
HTTPS(SSL/TLS)暗号化について
はじめに 皆さんこんにちは、オプスイン開発エンジニアの新川です。 この記事では、ウェブサービスに関わる上で基本中の基本のセキュリティともいえるHTTPSについて解説します。 HTTPSとは HTTPS(Hypertext Transfer Protocol Secure)は、HTTPによる通信をより安全に行うためのプロトコルです。HTTPとは別のプロトコルで、ウェルノウンポートも異なります。(HTTPは80番ポート、HTTPSは443番ポート) HTTPSを利用することにより、ウェブサイトをホスティングする場合に以下のようなメリットがあります。 改竄、盗聴などの攻撃を防ぐことができる HTTPSを利用する場合、ウェブブラウザからウェブサーバまでの通信が暗号化されます。これにより、例えば利用者がクレジットカード情報等をサーバに送信する場合でも、通信の盗聴や送受信データの改ざんを防ぐことができます。 なりすましの攻撃を防ぐことができる 「なりすまし」とはどういう物かというと、たとえばウェブサイトの閲覧者が銀行のサイトにアクセスして口座情報を入力するようなケースで、悪意のある物が銀行のページそっくりなサイトを用意し、そこにアクセスさせて個人情報を盗み取るような攻撃手段のことです。 HTTPSを利用するためには、ウェブサーバに「サーバ証明書」を配置する必要があります。これは、シマンテック社などの第三者機関が「このサーバは間違いなくこの会社で運用されているサーバですよ」というお墨付きを与えるものです。 ひとつ注意しないといけないのは、なりすましサイトもサーバ証明書を導入してHTTPS化している可能性があるということです。ブラウザから証明書を表示し、ちゃんと第三者期間のお墨付きを得た信頼できる証明書なのか確認することも重要です。 SEOに有利になる 検索エンジンがウェブサイトを検索結果に表示する際、検索エンジンによってはHTTPS化されているウェブサイトを検索結果の上位になるようにしていることがあります。GoogleはHTTPS化したサイトを優遇して検索結果に表示すると公に発表しています。 GoogleのHTTPS化への圧力は結構強いものがあり、最新のGoogle ChromeではHTTPS化していないサイトを閲覧すると警告が表示されます。URL入力欄の隣に「! 保護されていない通信」と表示されているサイトは、HTTPで通信していることを示しています。 暗号化プロトコルの違い HTTPSでは通信を暗号化する技術が使われますが、この暗号化技術(暗号化プロトコル)にはいくつか種類があります。「安全性が低いので使ってはいけませんよ」とアナウンスされている物もありますので、こちらでご紹介します。 SSLとは SSLは、一昔前に使われていた暗号化プロトコルです。SSL1.0〜SSL3.0までバージョンがありますが、2020年現在ではすべてのバージョンで脆弱性が指摘されておりますので、使用しないことが望ましいです。 TLSとは TLSはSSLの次期バージョンとして広まっている物ですが、このTLSについては2020年現在、TLS1.0〜TLS1.3まで存在します。このうち、TLS1.0, 1.1については脆弱性が指摘されており、使用しないことが望ましいです。 新規にウェブサイトを構築する場合は、暗号プロトコルとしてTLS1.2もしくは1.3を選択したほうが良いでしょう。 通信プロトコルの選択手段 SSL/TLSのうちどの通信プロトコルを使うかは、クライアント(ウェブブラウザ)の設定と、ウェブサーバ側の設定で決まります。 クライアント、サーバいずれも、「この暗号化プロトコルは使ってもいいですよ」と許可する形で設定を行います。どちらか一方で拒否しているプロトコルは使えないため、クライアント側が許可しているプロトコルをサーバ側がすべて拒否している場合はサイトを閲覧することができません。 InternetExplorerの古いバージョンではSSLしか使えないものもありますので、こうした古いブラウザで閲覧できるサイトはどんどん減っていることと思います。 必要の無いケース 顧客にウェブサービスを提供する上ではHTTPS化は必須と言えると思いますが、何でもかんでもHTTPSにしなければならないというわけではなく、HTTPSには以下のようなデメリットもあります。 費用がかかる HTTPSを実現するにはサーバ証明書が必要ですが、このサーバ証明書は数年単位の更新で、年額数万円が必要になることもあります。 ただ、最近はLet’s Encryptというサービスもあり、これを利用すると無料でサーバ証明書を導入することも可能です。 リソース消費が増える HTTPでの通信と比較して、HTTPSは暗号化の処理が走りますので、その分サーバのリソース消費が大きくなります。 こうしたデメリットを踏まえた上で、HTTPSを利用する必要が無いのは以下のようなケースです。 開発環境 […]
記事を読む
ユーザーの声をより反映できるサービス提供
現代では様々なサービス、商品があらゆるユーザーの手にわたり、人々の生活を豊かにするものとなっています。サービス提供の流れ、というものはある程度確実な形が存在していますが、中には少し違う方式があります。 今回紹介する方式のサービス提供を実際に活用している事業についても紹介していきます。 目次: 従来とは違う流れ オンラインクラスサービス【CLASS 101】 旅行企画SNS【Trippiece】 クラウドファンディング-ロモグラフィ社によるフィルム製造の例 クラウドファンディング-美術館KAMUの例 このような提供方式を採用することで得られるメリット まとめ 従来とは違う流れ 提供されている多くのサービスでは、上の画像のような流れが適用されています。まず初めにサービスの提供を行い、それに対してのリアクションを受け取って改良を繰り返していきます。 最大の特徴、上で紹介したものとの違いはサービスの提供の前にユーザーからの声を取り入れている、という点でしょう。 反面ユーザーの需要が一定数無ければコンテンツの提供までつながりづらいという点もありますが、実際にこれを採用している例も多くみられます。次は、その具体例を業界別にいくつか紹介していきます。 オンラインクラスサービス【CLASS 101】 CLASS 101は、韓国とアメリカを拠点に置くサービス。2020年の2月からは日本でもサービスを展開し始めました。 サービスの流れ ①クラスの掲載 イラストや写真、料理やハンドメイドなど多くのジャンルに関するクラスを掲載します。掲載ページには習得難易度や詳細が載せられており、予め確認が可能です。 ②希望者の募集 HPには多くのクラスが掲載されていますが、その全てが開講出来る、というわけではありません。クラスの開講のためには、希望者の応募が100人集まる必要があります。その時点で何人が応募しているかは常にメーターで確認することが出来、クラスの掲載主、ユーザーの双方にとってわかりやすい機能となっています。 ③開講 100人を超えると実際にクラスが開講されます。受講の際に使用する材料は予めCLASS 101から予め配送され、授業動画は期間内であれば何回でも視聴することが出来るため、確実に知識と技術の定着が可能です。他の受講生との共有、提出した作品に対してのフィードバックもあり、ユーザーにとって優しいコンテンツを提供していることがわかります。 冒頭で紹介したサービス提供の流れを活用してサービスを提供していることが分かったかと思いますが、そのなかでもCLASS 101の大きな魅力と言えるのはコンテンツ提供後の充実さではないでしょうか。 100人の応募者という条件を満たしたクラスだけを開講することで大多数のユーザーの需要を満たせるようにしていますが、受講生が求める「自分の技術の上達」を実現できるように更にサービスを提供しているという点は、CLASS 101の武器といえるでしょう。視点を変えて考えれば、最初に挙げた従来の流れにある「ユーザーの要望、意見に合わせたコンテンツのアップデート」という箇所をうまく変形させて組み込んでいる、とも言えそうですね。 旅行企画SNS【Trippiece】 株式会社Trippieceが旅行メディア「RETRIP」と一緒に2011年から運営しているサービス。2013年には観光庁長官賞も受賞しており、十分に知名度を得ています。 サービスの流れ ①企画の掲載 Trippieceが認可した企画プランナーによる旅行案を掲載しています。プランナー個人が立案を行うため、旅行会社の企画するプランよりも珍しい場所、内容のものが多くなっています。 ②参加者の募集 掲載から一定の期間、参加者を募る期間が設けられます。他のユーザーがどの程度企画に興味をもっているかがわかる投票機能なども提供されている為に応募期間の途中でもある程度需要を把握することが出来るように設計されていますが、旅行というコンテンツの特性上どうしても参加者を目標まで募れずに企画倒れしてしまうケースも多いようです。 ③ツアーの具体的な内容を練る 参加者とプランナーの間で、ツアーの中身を練っていきます。旅行先で自分がしてみたいことを組み込みやすいという利点があり、より満足するコンテンツに仕上げることが出来ます。 ④出発 […]
記事を読む
オプスインでの要件定義の進め方-CtoCマッチングシステムを例に
新規事業を構想して、システムの開発を進めようと思った時、 まず最初に要件定義を行います。 本記事では、オプスインでの要件定義の進め方を、 架空の中古家具CtoCマッチングシステムでの要件定義を例に説明いたします。 (※進め方はあくまで一例です。プロジェクトの規模や内容によって変わることがございます。) 1. サービスに関係する人の種類とサービスで行われることのヒアリング まずは、このサービスでどのようなことが行われるかをヒアリングしていきます。 「家具を出品し」と一言にいっても、それを実現するためには、そもそも「家具が登録」されていないといけませんし、 家具を登録する前には、「ユーザーアカウント登録」や「ログイン」をしている必要があります。 サービスを成り立たせるために必要なすべてのプロセスをヒアリングし、可視化してきます。 同時に、どんな関係者(=アクター)がいてどんなことを行うかをヒアリングします。 概要から、出品と購入をするユーザー、運営管理者が必要なことはわかりますが、 他にも購入された家具を輸送することに関連するアクターや、 もしかしたら、出品された家具を保管する倉庫に関連するアクターもいるかもしれません。 関係者の洗い出しと関係者ごとのプロセスを可視化していくことで、 サービスで行われることを明確にします。 2. 機能一覧と画面一覧の定義 サービスで行われることが明確になったら次は、 それを実現する上で必要なシステムの機能を定義していきます。 例えば、「ユーザーが購入する家具を探す」といったプロセスがあった場合にも、 家具の種類や条件から探す、部屋のテイストから探す、評価の高い出品者から探すなどいろんな形態が考えられます。 サービス特性に応じてどんな機能が必要かということをヒアリングしながら、定義していきます。 機能の定義が終わったら次は、 それらの機能を実現する上で必要な画面を定義します。 例えば「ユーザーが会員登録をする」機能を実現するためには、 「メールアドレスとパスワードを登録する」画面 「認証メールを送信完了したことを表示する」画面 「初回ログイン時プロフィールを入力する」画面 などが必要になるかもしれません。 実際のユーザーの操作を想像しながら画面を定義します。 3. 外部システムとの関係や連携機能の定義 本システム内では行わず、外部のシステムで行うことも定義していきます。 例えば、 購入時のクレジットカード決済機能はStripe(決済代行サービス)を利用する、 ユーザーからの問い合わせ対応はZendesk(カスタマーソフトウェア)を利用するなど、 利用する外部システムの定義と、連携方法の定義を行います 4. 定時で自動実行される(バッチ)機能の定義 画面には表れないような、定時で自動実行される(バッチ)機能も漏れなく定義をしていきます。 例えば、 購入してxx日後の9:00に家具使用感のレビュー依頼をメールで通知する などサービスを成り立たせるために必要な機能を定義します。 5. […]
記事を読む
EAフレームワークに基づく要件定義の実践
はじめに こんにちは、オプスイン開発部の乾です。私は現在システム開発プロジェクトの要件定義を担当しています。 早速ですが本記事の結論から申しますと、要件定義で成果物を体系的に作成することで、EAを実践しつつ顧客から信頼いただけるシステム開発を実現していきたい、と考えています。 ↓お問い合わせはこちら↓ お問合せ 要件定義とは システム開発における要件定義とは、何を作るかを決める工程です。要件定義が終了すれば、(理想的には)あとは要件定義書にしたがってシステムを作るだけです。よって、要件定義で重要なのは、どんなシステムを作るかについて、顧客と合意することです。 具体的には何をもとに合意すれば良いのでしょうか?IPAの資料室には、機能要件の合意形成ガイドとして下記が上がっています。 システム振る舞い設計 画面設計 データモデル設計 外部インタフェース設計 バッチ設計 帳票設計 オプスインではこれらの要件定義フェーズの成果物として特に下記の項目を重要視し、テンプレート化しています。 業務フロー図 機能リスト 画面リスト 外部インタフェースリスト バッチリスト インフラ構成図 非機能要件リスト EA 一方、EA(エンタープライズアーキテクチャ)という言葉をご存知でしょうか? サイト https://www.cloudtimes.jp/dynamics365/blog/enterprise-architecture.html から引用すると、 EAとは経営戦略とITを絡めた全体最適化によって、顧客ニーズをはじめとする社会環境や情報技術自体の変化に素早く対応するための構造です。EAを実践することで企業は組織全体で統一された情報、効率良く整備された業務プロセスを手に入れることができ、利益率をアップしたり、新たなビジネス価値を創出することができます。 となります。参考までにEAは4つのアーキテクチャからなります。 BA(ビジネスアーキテクチャ ) AA(アプリケーションアーキテクチャ ) DA(データアーキテクチャ ) TA(テクノロジーアーキテクチャ ) 概念的にはわかったような分からないような、実現できたら良いとは思いますが、実際にどうしたら良いかが分からないですよね。再びIPAの資料室に戻りますが、EAフレームワークがあります。ここではEAの各アーキテクチャをEAプロセスと主要成果物として下記のように定義されています。 BA BA-1 (ファンクション/プロセス分析) DFD BA-2(情報分析) 情報リスト BA-3(業務フロー作成) 業務フロー AA AA-1(システム機能定義) システム機能階層図 システム機能定義書 AA-2(システム関連定義) システム関連図 システム間インタフェース定義書 DA DA-1(概念データモデル作成) 概念ERD […]
記事を読む