Next.js におけるレンダリングを理解する


こんにちは、テクノロジー・コンサルティング課のゴマ太郎です。
今回は Next.js におけるレンダリングについて調査しましたのでここで共有できればと思います。

1. はじめに

今回は App Router について調査しております。
Next.js の App Router では、デフォルトで Server Components が採用されており、 Page Router とは異なるレンダリングの仕組みが導入されています。
このレンダリングの挙動を理解することは、パフォーマンスの最適化やバグの防止に重要になってきます。

2. 初回レンダリングの順序

Next.js の App Router における初回レンダリングは、以下の順序で実行されます:

  1. サーバーサイドでのレンダリング
    • ルートレイアウトから順に Server Components をレンダリング
    • 静的 HTML を生成
    • RSC ペイロードを生成し、ストリーム送信
  2. クライアントサイドでのハイドレーション
    • 静的 HTML を描画(すぐにユーザに見える)
    • RSC ペイロードを受信し、React ツリーを再構築
    • Client Components を対象にハイドレーション(既存 HTML と突き合わせ)
    • イベントリスナーが付与され、インタラクティブ化


「ストリーミング」の概念
App Router の大きな特徴の一つは、レンダリングが完了した部分から順次クライアントに送信するストリーミングです。これにより、体感的な表示速度が向上します。

Client Components の初期 HTML
サーバーサイドの段階で、Client Components も初期状態の HTML としてレンダリングされます。そのため、 JavaScript がまだ読み込まれていなくても、ボタンや入力フィールドの「見た目」は表示されます。その後、クライアントサイドでハイドレーションが行われ、「機能」が追加されるイメージです。

3. 再レンダリングの条件とタイミング

App Router では、再レンダリングの制御が以前より細かくなっています。
主な再レンダリングの条件は以下の通りです:

  1. Server Components の再レンダリング
    • ルート変更時
    • データの再検証(revalidation)時
    • サーバーアクション実行時
  2. Client Components の再レンダリング
    • 状態(state)の変更時
    • プロパティ(props)の変更時
    • 親コンポーネントの再レンダリング時
    • コンテキスト(context)の値変更時

    これら Client Components の再レンダリングのトリガーは、従来の React の挙動と同じです。重要なのは、 Client Components の再レンダリングはブラウザ上のみで完結し、サーバーへのリクエストは発生しないという点です。これにより、 UI のインタラクションに対して高速なフィードバックが可能になります。

4. Server Components と Client Components の連携

App Router の強力な点は、これら2種類のコンポーネントをシームレスに連携させられることです。

Server Components から Client Components へ

最も一般的なパターンは、Server Components でデータを取得し、それを Client Components に props として渡す方法です。これにより、データの取得はサーバーで行い、インタラクティブな部分はクライアントで描画するという役割分担ができます。

import InteractiveButton from './InteractiveButton'

async function getUserData() {
  // サーバーサイドでのみ実行されるデータ取得処理
  const res = await fetch('https://api.example.com/user/1', { cache: 'no-store' })
  return res.json()
}

export default async function Page() {
  const user = await getUserData()

  return (
    <main>
      <h1>User Profile</h1>
      <p>Name: {user.name}</p>
      <InteractiveButton initialCount={user.loginCount} />
    </main>
  )
}

'use client'

import { useState } from 'react'

export default function InteractiveButton({ initialCount }) {
  const [count, setCount] = useState(initialCount)
  return (
    <button onClick={() => setCount(count + 1)}>
      Login Count: {count}
    </button>
  )
}

Client Components 内で Server Components を利用する

Client Components に Server Components を直接インポートすることはできません。しかし、props として Server Components を渡すことで、擬似的にネスト(入れ子)にすることが可能です。`children` props はこの典型的な例です。

レイアウトコンポーネントが良い例で、Client Component で作成したタブ切り替えUIの各タブ内に、Server Component で描画された静的なコンテンツを表示する、といった複雑な構成も実現できます。

import TabContainer from './TabContainer'
import StaticContent from './StaticContent'
import DynamicContent from './DynamicContent'

export default function RootLayout() {
  return (
    <html>
      <body>
        {/* Client Component に Server Components を children として渡す */}
        <TabContainer tabs={{
          'Static': <StaticContent />,
          'Dynamic': <DynamicContent />
        }} />
      </body>
    </html>
  )
}

5. レンダリングの使い分け

では、どのような基準で Server Components と Client Components を使い分ければ良いのでしょうか。以下の表にまとめました。

Server Components Client Components
主な役割 データ取得, バックエンド処理, UIの骨格 インタラクティブなUI, ブラウザAPI利用
実行環境 サーバー クライアント (ブラウザ)
データアクセス DB直結, ファイルシステム, 外部API 不可(API経由のみ)
インタラクティブ性(useState, useEffect) 不可 可能
バンドルサイズ クライアントへの影響なし 影響あり
適した用途 静的ページ, データ表示, 認証チェック ボタンやフォーム, アニメーション, 状態管理

基本は「できる限り Server Components を使い、インタラクティブ性が必要な部分だけを Client Components に切り出す」ことです。
これにより、クライアントに送信する JavaScript の量を最小限に抑え、初期表示速度を向上させることができます。

6. まとめ

今回は Next.js の App Router におけるレンダリングの仕組みについて解説しました。

  • 初回表示は、サーバーでレンダリングされた HTML と RSC ペイロードを元に、クライアントがハイドレーションを行います。
  • 再レンダリングは、 Server Components と Client Components でトリガーが異なります。
  • コンポーネントは役割に応じて適切に使い分けることが、パフォーマンス最適化の鍵です。

App Router のレンダリングモデルは、サーバーのパワーとクライアントのインタラクティブ性を両立させるための非常に強力な仕組みです。
この挙動を正しく理解し、コンポーネントを適切に設計することで、ユーザー体験の優れた高速な Web アプリケーションを構築できるでしょう。

この記事を書いた人


ニックネーム
ゴマ太郎
経歴
新卒入社4年目(22卒)
昨年度から新設されたテクノロジー・コンサルティング課(TC課)にて、セールスエンジニアとして提案活動をしながら開発業務も行っております。
TC課の業務のほかにも、新卒採用でのリクルータ業務や新人研修でのメンター業務、時々マーケティングのお手伝いなどもしております。



\DX推進・AI導入支援なら、株式会社シー・エス・エスへ/

AIコーディング支援ツール徹底比較!GitHub Copilot vs. Cursor、あなたのチームに最適なのはどっち?(後編)

GitHubcopilotVS Cursorサムネ(後編)3

【前編】では、2つのAIコーディング支援ツール「GitHub Copilot」と「Cursor」の基本的な性能として、「開発コスト削減効果」「操作性」「コード提案の正確性」を比較しました。性能面ではCursorが僅かにリードしていましたが、ツールの選定は個人の開発効率だけで決まるものではありません。

今回は、チーム開発の質を左右する「可読性」や「レビュー支援」、導入への決め手となる「チーム管理とセキュリティ」といった項目から比較を再開します!

▼【前編】はこちら!

blog.css-net.co.jp

検証エンジニア

りんちゃん(入社2年目)

Qube スマホアプリ開発(主にFlutterとRuby On Railsを使用)を担当し、

UI/UXの改善や新機能の実装を行っています。

 

ハニー君(入社2年目)

Qube Webアプリ開発(主にRuby On RailsとPythonを使用)を担当し、

UI/UXの改善や生成AIを使った新機能の実装を行っています。

徹底比較!6つの評価項目で見る実力(後編)

可読性・保守性[検証項目4]

チーム開発で気になる「コードの読みやすさ」と「命名規則」。この可読性・保守性の項目では、両ツールともに見事な引き分けに終わりました 。

🗨️ 検証エンジニアの対談

りんちゃん:

この項目は引き分けですね。どちらも既存のコードの雰囲気を読んで、コメントとか変数名を提案してくれるから、コードの統一性が保ちやすかったです 。

ハニー君:

はい、保守性に関しては甲乙つけがたいです。本当に同程度の精度だったと思います。
ただ、GitHub Copilotは毎回参照ファイルを自分で設定する必要があったので少し手間に感じました 。

コードレビュー支援[検証項目5]

レビュー支援では、僅差の結果になりました 。検証者の声を見ると、実はAIのレビュー機能そのものに大きな差はなく、この点差は「使い勝手」の部分にあります。

🗨️ 検証エンジニアの対談

りんちゃん:

レビュー支援はGitHub Copilotの方が使いやすかったですね。「良い点」と「改善点」を分けてくれるのが、レビューの質向上に繋がりました 。

ハニー君:

機能自体はどちらも似ていましたけどね。チャットで支援してもらう形なので、Cursor単体でレビューが劇的に効率化するとまでは、正直感じなかったです 。

りんちゃん:

ただ、Cursorはブランチを指定してもプロジェクト全体をレビューしようとするので、毎回プロンプトで「このブランチだけ!」って書かないといけなかったのが少し面倒でした 。

ハニー君:

GitHub Copilotは指定したブランチごとに内容を確認できたので、レビュー工数は大幅に削減できましたね 。

チーム管理とセキュリティ[検証項目6]

個人の開発効率も重要ですが、会社としてツールを導入する上では、チーム全体の管理のしやすさやセキュリティが欠かせません。今回の検証では、この点で両ツールに大きな違いが見られ、導入の決め手となりうる重要なポイントが明らかになりました。

 

GitHub Copilot ~管理しやすく、法人でも安心~

GitHub CopilotのBusinessプラン($19/ユーザ/月)は、チームでの利用を前提としており、管理機能が非常に充実しています。メンバーの追加や削除はもちろん、チーム全体の請求を一つにまとめることが可能です。また、一部の従量課金機能についても管理者が上限を設定できるなど、企業の予算管理の観点からも安心して利用できます。

 

Cursor ~個人利用は快適、でもチーム導入には注意が必要~

一方、Cursorはチームで管理機能を使おうとすると、一人あたり$40/月の高価なプランが必要になります。GitHub Copilotと価格帯が近いProプラン($20/ユーザ/月)は、あくまで個人利用向け。そのため、チームでProプランを使う場合、請求はメンバーごとに行われ、経費精算が煩雑になる可能性があります。 しかし、最も注意すべきなのはセキュリティ設定です。CursorのProプランでは、AIにコードを学習させるかどうかの設定を、各メンバーが個人で変更できてしまいます。これは、企業が「会社の資産であるソースコードをAIに学習させない」というポリシーを徹底できないリスクを意味し、チームでの利用を考える上での大きな懸念点と言えるでしょう。

結論

ここまで、様々な角度からGitHub CopilotとCursorを比較してきました。開発支援の性能面では一長一短でしたが、「コード提案の正確性」と「チームでの管理・セキュリティ」という観点では大きな違いが浮かび上がりました。当社の開発チームの総合評価では、僅差でCursorが上回る結果となりましたが、最終的に、あなたのチームにピッタリなのはどちらでしょうか?これまでの検証結果をまとめてみましょう。

「GitHub Copilot」はこんなチームにおすすめ!

  • チームでの導入を前提に、管理のしやすさやセキュリティを重視したい
  • 今の開発環境(IDE)を変えずに、手軽にAIアシスタントを導入したい
  • 長いプロンプトを考えるより、直感的な補完機能でサクサク開発したい

GitHub Copilotは「チームでの導入しやすさ」と「管理機能の充実」が光ります。法人として安心して使えるAIアシスタントを探しているなら、まず検討したい選択肢です。

「Cursor」はこんなチームにおすすめ!

  • 個人開発者として、コード提案の『質』と『正確性』を何よりも追求したい
  • AIにプロジェクト全体を深く理解させた上で、高度な壁打ち相手になってほしい
  • 新しいエディタの導入に抵抗がなく、チームプランのコストや個別管理が許容できる

Cursorは、AIによるコード生成の「質」と「正確性」が最大の魅力です。個人の生産性を極限まで高めたい、まさに「AIネイティブ」な開発をしたい方に向いています。

 

AI開発支援ツールは、今後も急速に進化していくことが予想されます。ツールの「性能」だけでなく、「チームでの使いやすさ」や「セキュリティ」といった多角的な視点を持ちながら、ぜひあなたのチームに最適なパートナーを見つけて、生産性の向上を実現してください。部署やプロジェクトの特性によっては、両方のツールを導入し、それぞれの得意な場面で使い分けるのも面白いかもしれませんね。

 

▼【前編】はこちら!

blog.css-net.co.jp

この記事を書いた人

【ニックネーム】

りん
【経歴】

入社2年目

自社サービスであるBtoBコミュニケーションプラットフォーム「Qube」というSaaS開発に携わっています。

最近はスマホアプリ開発をメインで行っています。

【一言】

大阪万博おすすめです!!

\DX推進・AI導入支援なら、株式会社シー・エス・エスへ/

AIコーディング支援ツール徹底比較!GitHub Copilot vs. Cursor、あなたのチームに最適なのはどっち?(前編)

GitHubcopilotVS Cursorサムネ(前編)3

ソフトウェア開発の世界では、AIの活用が急速に進んでいます。特に、コーディングを直接支援してくれるAIツールは、開発の生産性を劇的に向上させる可能性を秘めており、多くの開発者が注目しています。

しかし、「どのツールが本当に自社の開発プロセスに合うのか?」を見極めるのは簡単ではありません。そこで今回は、当社開発チームのエンジニア2名が2025年6月から8月にかけて、代表的な2つのツール「GitHub Copilot」と「Cursor」を実際に検証し徹底比較しました!

ぜひこのブログが読んでいるあなたの助けとなれば幸いです。

検証エンジニア

りんちゃん(入社2年目)

Qube スマホアプリ開発(主にFlutterとRuby On Railsを使用)を担当し、

UI/UXの改善や新機能の実装を行っています。

 

ハニー君(入社2年目)

Qube Webアプリ開発(主にRuby On RailsとPythonを使用)を担当し、

UI/UXの改善や生成AIを使った新機能の実装を行っています。

エントリー紹介:注目のAIアシスタント

まずは、今回比較する2つのツールを簡単にご紹介します。

GitHub Copilot

言わずと知れた、GitHub社が提供するコーディングアシスタントです。

VScodeなどの使い慣れた開発環境(IDE)に”拡張機能”として導入でき、

リアルタイムでコードの補完や提案を行います。

 

Cursor

Anysphere社が開発した「AIネイティブ」なコード”エディタ”です。

プロジェクト全体のコードを文脈として深く理解し、

より高度なコード生成や編集を得意としています。

徹底比較!6つの評価項目で見る実力(前編)

今回の検証では、「開発コスト削減効果」や「操作性」などを6つの項目で評価を行いました。当社の開発チームの総合評価では、僅差でCursorが上回る結果となりました 。

それでは、各項目の詳細な評価を見ていきましょう。

開発コスト削減効果[検証項目1]

 最も重視した「開発コスト削減効果」では、Cursorがやや優勢でした 。

🗨️ 検証エンジニアの対談

ハニー君:

GitHub Copilotでの開発工数はどうでしたか?僕はWeb開発で1機能あたり、見込み40時間が実績24時間に短縮されました。ただ、プロンプトを考えるより自分で書いた方が早い時もあって、正直そこまで劇的に削減されたとは感じなかったですね。

りんちゃん:

私はスマホ開発で見込み28時間が実績12時間になったので、大幅に効率が上がったと感じました。特に初めて使う言語の学習効率が上がったのが大きいです。GitHub Copilotの決まったパターンを繰り返すコードの自動補完や、コメントからコードを生成してくれる機能も、記述速度アップとミス削減に効きましたね。

ハニー君:

たしかに、開発で行き詰まった時にすぐ質問できる相手がいる感覚は、作業効率向上に繋がりましたね。

りんちゃん:

でも、やっぱり工数削減効果はCursorの方が大きかったですね。スマホ開発で、見込み56時間が実績28時間まで半減しました。

ハニー君:

私もWeb開発で16時間が見込みで実績6時間でした。一番の違いは補完機能の精度だと感じます。GitHub Copilotは精度が物足りなくて結局手直しする場面が多かったですが、Cursorは精度が高いから積極的にAIに任せられました。

りんちゃん:

分かります。CursorはGitHub Copilotが1行ずつ提案するところを、メソッド単位でまとめて提案してくれたので、さらにスピードが上がりました。画像を読み込ませてデザインをコード化できたのも衝撃でしたね。

ハニー君:

今回は試せませんでしたが、Figma連携を使えばフロントエンドの作業はさらに効率化できそうですよね。

操作性[検証項目2]

操作性では、こちらもCursorに軍配が上がりました 。ただ、この差は「どちらが絶対的に良い」というより「どちらのスタイルが好みか」という違いも影響しているようです。

🗨️ 検証エンジニアの対談

ハニー君:

操作性でいうと、CursorはVScodeに操作感が似ていたので、エディタ自体にはすぐ慣れましたね 。

りんちゃん:

確かに。ただ、GitHub Copilotの@filesコマンドみたいに、初見のコードをすぐに解説してくれる機能は実用的で分かりやすかったです 。

ハニー君:

それはそうですね。でも、GitHub Copilotで一番気になったのは、AIに参照してほしいファイルを毎回手動で指定する手間でした 。

りんちゃん:

すごく分かります!その点、Cursorの@files機能は複数ファイルを一気に選択できるので快適でした 。画面にショートカットが表示されて覚えやすいのも地味に良かったです 。

ハニー君:

その差は大きいですよね。

りんちゃん:

ただ、Cursorはインラインコマンド([/]や@)がGitHub Copilotより少し複雑で、慣れるまで少し戸惑いましたね 。設定画面が2箇所にあるのも最初だけ分かりにくかったですが 。

ハニー君:

ええ、細かい部分で慣れは必要ですが、日々のコーディングで頻繁に行う「ファイルを参照させる」という操作がスムーズなだけで、総合的な快適さはCursorの方が一枚上手でしたね。

コード提案の正確性[検証項目3]

コード提案の正確性でも、Cursorがリードしました 。どちらのツールも十分に実用的ですが、この評価の差は、AIがどれだけ「プロジェクトの全体像」を理解してくれるか、という点で違いがありました。

🗨️ 検証エンジニアの対談

ハニー君:

精度はやはりCursorに軍配が上がりますね。GitHub Copilotは直前の文脈とか、関数の中だけ見て提案する印象でしたが、Cursorはファイル全体を俯瞰して、ちゃんと意味の通った提案をしてくれる感じがしました 。

りんちゃん:

同感です。GitHub Copilotはエラーが出ても、そのエラー文を伝えればちゃんと修正してくれますが、そもそもCursorの方が提案されたコードのエラーが少なかったですね 。

ハニー君:

GitHub Copilotは存在しないテーブル項目を生成してしまうこともあり、その点は工夫が必要でした。

 

ここまで、性能の中核をなす3項目を比較してきました。コードの提案精度や操作性ではCursorが優勢でしたが、チームに最適なAI開発支援ツールはこれだけでは決まりません。

 

【後編】では、チーム開発で重要な「可読性」や「コードレビュー支援」、そして導入の決め手となる「チーム管理とセキュリティ」について、さらに詳しく見ていきます!


▼【後編】のブログはこちら!

blog.css-net.co.jp

この記事を書いた人

【ニックネーム】

りん
【経歴】

入社2年目

自社サービスであるBtoBコミュニケーションプラットフォーム「Qube」というSaaS開発に携わっています。

最近はスマホアプリ開発をメインで行っています。

【一言】

牧場物語『風のグランドバザール』とってもおすすめです!!

\DX推進・AI導入支援なら、株式会社シー・エス・エスへ/

新卒エンジニアの研修体験記|Ruby on Railsで実践開発に挑戦!

Ruby on Railsで実践開発をした新卒エンジニアの研修体験記の表紙画像

みなさんこんにちは。
株式会社シー・エス・エス、プロダクト・サービス事業部の2年目、ハニーです。

プロダクト・サービス事業部は、主に自社プロダクト(Qube)の開発・運営や、新しい技術(特に生成AI)の研究開発・検証など、システム開発の枠を超えた幅広い技術・サービス領域を推進している部署です。
今回は、私が入社1年目でこの部署に配属されてから行った、2か月間の研修についてお話ししたいと思います!

最初の1ヵ月は、RubyとRuby on Railsの学習

まず、最初の1ヵ月はRubyとRuby on Railsについての学習を行いました。

Ruby

Rubyの学習では、基本的な文法や条件分岐、繰り返し処理、メソッドの作り方など、プログラミングの基礎的な部分を学んでいきました。
新しい言語を学ぶと聞いて最初は不安でしたが、新入社員研修でJavaを学んでいたため、Ruby言語に慣れるまでそこまで時間はかかりませんでした。

Ruby on Rails

その後、Ruby on Railsの学習に進み、Webアプリケーション開発の基礎を学びました。
初めてフレームワークを使ったので、MVCモデルの理解やルーティング設定、エラー対応が難しく感じました。
特に、MVCの各役割をしっかり分けて実装するのに苦労し、ルーティングで思い通りに画面遷移できないことがありました。エラーメッセージも複雑で、問題の特定に時間がかかることが多くありました。そんな時は、先輩方やAIに質問することで問題を解決していきました。

実践力を磨く!残り1か月はRuby & Ruby on Railsで開発演習

残りの1ヵ月は、最初の1ヵ月で学んだRubyとRuby on Railsの知識を活かして、問題出題システムを開発し最終日に成果発表をする、という課題に取り組みました。

問題出題システムの作成

このシステムでは、ユーザーがログイン後に試験を受けることができる機能が実装されており、試験の結果を確認することもできます。また、管理者は問題の追加や編集、さらにはユーザーの登録・管理ができるようになっています。
今回は私が作成した問題出題システムの画面をいくつかご紹介します!
まず、こちらがメイン画面になります。ここから問題を選択すると試験を受けることができます。

試験は1問解くごとに正誤判定、解説が表示され、このような画面になります。

問題が解き終わると結果画面が表示され、後でチェックしたい問題を保存しておくことができます。

ユーザーの追加や削除、編集もでき、基本的な機能を搭載しました。

今回紹介した機能に加えて試験設定やチェックリスト、結果一覧、ログイン/ログアウト機能など、さまざまな機能も実装しました。
また、今回の開発ではこれまであまり使用してこなかった新しい技術に積極的に挑戦しました。具体的には、Ajaxを使用してページ遷移を伴わない非同期処理を実現し、MaterializeCSSを使ってデザインにも力を入れました。

発表前日に問題が発生するアクシデントも...!

順調そうに見える研修ですが、実はこの問題出題システムは発表前日に問題が発生していました...。
それは、異なるユーザーが同時に試験を受けることができない、という問題です。
発表前日の会議で先輩方に試していただく時間があり、そこで気づきました。そこで確認してなかったらと考えると、ぞっとします。
会議終了後、急いで修正に取り掛かりましたが、なかなか解決できず、AIにも頼りましたがうまくいきませんでした。しかし、先輩方と一緒に考えることで、なんとか解決することができました。先輩方には頭が上がりません。

同じ過ちを繰り返すまいと心に誓うも、またも同じようなミスを発見...!

この問題の原因は、テストを十分に実施していなかったことと、アプリケーションを複数人で同時に扱うことを考慮していなかったことにありました。
この経験を活かして、同じ間違いはしないようにと心に誓いました。しかし、発表当日にアプリを試してもらった際、同じようなミスを再度発見しました。
大きな問題ではなかったので良かったのですが、とても悔しかったです。この悔しさを忘れずに、今後業務に取り組みたいと強く思いました!

研修を通して学んだこと

この2ヶ月の研修を通して学んだことは、主に3つあります。

1. まずは基礎知識を定着させよう

1つ目は、基礎知識の定着が重要だということです。
Ruby on Railsを初めて学び、エラーに苦戦しましたが、Railsに関する知識が身についていくうちに、初めて見るエラーでもある程度理解できるようになりました。
また、その経験を通じて、エラーの原因を自分で調べる力もついたことが大きな収穫です。

2. 積極的に質問をしよう

2つ目は、質問を積極的にすることです。わからないことは自分で調べ、それでも解決できない場合は人に助けを求めることが大切だと感じました。
自分ひとりで考えると、考え方が偏ることがあります。他の人に頼ることで視野が広がり、質問することの重要性を改めて実感しました。
ちなみに、今回作成したアプリのデザインについては、同じ部署の同期からアドバイスをいただきました。

3. テストはしっかりと実施しておこう

3つ目は、テストの大切さです。できたからといってすぐに次に進むのではなく、できたものを実際に試し、問題がないか確認すること、さらに使う人の立場に立って考えることが大切だと感じました。
今後は、この研修で学んだことを活かして、さらに成長していきたいと思います。

【最後に】最も重要なのは、基礎を確実に身に付けておくこと

この2ヶ月の研修を通じて多くのことを学びましたが、最も重要だったのは、実際の開発においてどれだけ基礎をしっかりと身につけることが大切かということです。
また、問題が発生したときに焦らず、周囲の人と協力して解決する力を身につけられたことも、大きな収穫でした。
研修での経験を活かして、今後も継続的に学び、成長し続けることができるよう努力していきたいと思います!

今では配属から約10か月経ち、AIを使った新機能の開発を任されるまでに成長することができました!
先日、ついにその新機能「AIアイコン生成」をリリースしたので、以下ブログも見て頂ければ嬉しいです。

www.css-net.co.jp

\ITエンジニア大募集/

この記事を書いた人

 

【ニックネーム】
ハニー
【経歴】
入社2年目
自社サービスであるBtoBコミュニケーションプラットフォーム「Qube」というSaaS開発に携わっています。
【一言】
資格を取りたい頑張りたい!

SQL用語集 ~初めてのSQL実務~

SQL用語集の表紙画像みなさん、こんにちは。アプリケーション開発課のいだちゃんです。
現在お客様先に常駐しており、他の会社さんと協力しながらプロジェクトを進行しています。そこで一緒に作業している方と、SQLについての疑問点と調べた結果をリスト化しました。共同作成したいわゆる用語集を、初の常駐先で仲良くなった思い出の記録として「備忘録的」に一部を抜粋&補足しました。

サブクエリ

            • -

サブクエリとは、SELECTINSERTUPDATE、またはDELETEの各ステートメントの内部、別のクエリの入れ子になっているクエリ部分のことです。
※クエリとはDBに対する命令文のことです。

            • -


サブクエリの特徴

  • サブクエリを含む多くのSQL文は、結合(JOIN)などで書き換えることができる
  • サブクエリのSELECT文は常に()で囲む
  • 1つ上のレベルのSELECTINSERTUPDATE、またはDELETEの各文のWHERE句またはHAVING句の中、あるいは別のサブクエリの中で入れ子にできる

サブクエリの種類

  • INで導かれるリスト
// IN句使用
SELECT 
    name,
    birthday,
    jyunishi 
FROM 
    table_a 
WHERE 
    birthday_month IN (SELECT month FROM table_z);
  • ALLで修飾された比較演算子で導かれるリストの操作も可能
// ALL使用:すべての行が条件を満たす場合、TRUE
SELECT 
    department_name,
    establishment_year 
FROM 
    department 
WHERE 
    department_id = ALL (SELECT department_id FROM employee where work_place is not null and age <= 35);
  • 修飾されていない比較演算子で導かれ、単一の値を返す必要があるサブクエリ
 =  >  <  >=  <=  <>  !=  <=>
  • EXISTSで導かれる、存在を検査するサブクエリ
SELECT 
    category 
FROM 
    table_u 
WHERE 
    EXISTS ( SELECT sub_category FROM table_sub WHERE table_u.id = table_sub.id);

// *でもOK
SELECT 
    * 
FROM 
    table_u 
WHERE 
    EXISTS ( SELECT sub_category FROM table_sub WHERE table_u.id = table_sub.id);


条件分岐 - CASE

            • -

複数の比較から、条件付きで特定の値を返します。

            • -


条件分岐 - CASE の特徴

  • 特定の列の値に基づいて条件を評価し、それに応じた結果を返す
  • 複数の条件が一致する場合でも、最初に一致した条件の結果1つが返される
  • 値や指定範囲によって異なる処理を行いたい場合に使用することが多い
  • 一致する値がない場合は、ELSE句で指定された結果が返されるが、ELSE句は省略可能
  • どの値とも一致しない場合は、NULLが返される

条件分岐 - CASE の種類

  • 式を一連の単純な式と比較して特定の値を返す単純なcase文
CASE kana
    WHEN 'A' THEN 'あいうえお'
    WHEN 'B' THEN 'かきくけこ'
    WHEN 'C' THEN 'さしすせそ'
        ...
    ELSE 'その他'
END
  • 特定の値を返すように一連のbool式を評価する検索されたcase文
@num
CASE
    WHEN 10 > @num THEN 'small'
    WHEN 10 <= @num AND 30 > @num THEN 'mediam'
    WHEN 30 <= @num AND 50 > @num THEN 'big'
    ELSE 'extra'
END 


結合

          • -

複数のテーブルを組み合わせて新たなデータセットを作成します。
大きな分類として、ある共通の項目をキーに一方のテーブルの列に他方のテーブルの列を結びつける方法(join)と、同じ項目を持つことを前提とし一方のテーブルの行に他方のテーブルの行を繋げる方法(union)があります。

          • -

join

joinの特徴

  • テーブル間のリレーションシップに基づいて、複数のテーブルからデータを取得できる
  • 1つのテーブルから外部キーを指定し、他のテーブルでそれに対応したキーを指定する
  • 列の値の比較に使用する論理演算子を指定する

joinの種類

  • 論理結合操作

 - 内部結合  : INNER JOIN
 - 左外部結合 : LEFT [ OUTER ] JOIN
 - 右外部結合 : RIGHT [ OUTER ] JOIN
 - 完全外部結合: FULL [ OUTER ] JOIN
 - クロス結合 : CROSS JOIN

  • 物理結合操作

 - ネステッド ループ結合

外部データセットの各行に対して、内部データセットのすべての行を取得する


 - ソート/マージ結合

ソートされ、1つ目のデータセットの各行に対して、2つ目のデータセットが前回の反復処理で得られた一致を基準とした開始位置からプローブされ、一致した行を結合する


 - ハッシュ結合

小さい方のデータセットのメモリー内に結合キーのハッシュ表を作成して決定的ハッシュ関数によりハッシュ表内に格納する場所を指定し、大きい方のデータセットはスキャンされ、ハッシュ表で結合条件を満たす行が検索される


union

unionの特徴

  • 2つのクエリからの結果セットが連結される
  • 2つのテーブルから収集された列から個々の行が作成されるわけではない
  • 連結するには以下の条件を満たしている必要がある

 - 列の数と順番は、すべてのクエリで同じであること
 - データ型に互換性があること

unionの種類

  • 重複が除外される : UNION
SELECT
    month_number,
    month_eword
FROM
    table_X

UNION

SELECT
    month_number,
    month_eword
FROM
    table_Y
month_number month_eword
1 January
4 April
7 July
11 November
12 December


  • 重複が含まれる : UNION ALL
SELECT
    month_number
    month_eword
FROM
    table_X

UNION ALL

SELECT
    month_number
    month_eword
FROM
    table_Y
month_number month_eword
1 January
4 April
7 July
11 November
4 April
11 November
12 December



おまけ

oracleのヒント句

          • -

ステートメントの実行中、クエリオプティマイザーの規定の動作をオーバーライドするために使用されます。
ロック方法、1つ以上のインデックス、クエリ処理操作(テーブルスキャンやインデックスシークなど)、その他のオプションを指定できます。

          • -

基本構文

SELECT  /*+ <ヒント句> */
    /* コメント内容(任意) */

特徴

  • SELECTINSERTUPDATEDELETEMERGE文に対して適用され、SELECTなどの後にヒント句を記載する
  • ヒントを他のオプションと一緒に指定する場合は、WITHキーワードを使用することが推奨される
  • テーブル名の指定は実名だが、エイリアスを指定したテーブル名を使用する場合はエイリアス(別名)を指定する

種類(代表例)

  • INDEX

 - 指定した表に対してインデックススキャンをする
 - 1つ以上のインデックス名またはIDを指定する
 - 反対に利用しない場合はNO_INDEX、スキャン方向を制御する場合はINDEX_ASCINDEX_DESCを使う

  • FULL

 - 指定した表をフルスキャンする

  • ORDERED

 - FROM句に記述された順に結合をする

  • LEADING

 - 表を結合する順序を指定する
 - USE_NLUSE_HASHと組み合わせて使うことが多い

  • USE_NL

 - 指定された各表をネステッドループ結合で結合する
 - 指定された表は内部表として使用される
 - 反対にネステッドループ結合をしないように指示する場合はNO_USE_NLを使う

  • USE_HASH

 - 指定された各表をハッシュ結合を使用して別の行のソースに結合する
 - 反対にハッシュ結合しないように指示する場合はNO_USE_HASHを使う

  • USE_MERGE

 - 指定された各表をソート/マージ結合を使用して別の行のソースに結合する
 - 反対にソート/マージ結合しないように指示する場合はNO_USE_MERGEを使う

  • NOLOCK(READUNCOMMITTED)

 - 現在のトランザクションによって読み取られたデータが、他のトランザクションによって変更されるのを防ぐために共有ロックを発行しない
 - 他のトランザクションで排他ロックが設定されていても、ロックされたデータを現在のトランザクションで読み取ることをブロックされない
 - 他のトランザクションでロールバックされているデータ変更を読み取る可能性がある

  • READCOMMITTED

 - 読み取り操作が、ロックまたは行のバージョン管理を使用する
 - データベースエンジンで、データの読み取り時に共有ロックの獲得と読み取り操作完了時にロックの開放の指定もできる


最後に:初めてのSQL実務、学びを振り返って

今回は設計書を読み込みましたが、データモデルの実装は行っていません。ただ、業務で使用されているものに初めて触れる機会となりました。SQLは新人研修で学びましたが、実務では初めて見るものもあり、わからない用語の多さに圧倒されながらも作成しました。経験や知識は積み重ねが大切だと考えているので、業務を通じて少しずつ吸収していきたいと思います。また、今回は学習の一環として、実務で生じた疑問点と類似するものも併せて記載しました。


参考

サブクエリ
サブクエリ (SQL Server) - SQL Server | Microsoft Learn
条件分岐 - CASE
CASE ステートメント (MDX) - SQL Server | Microsoft Learn
結合 - JOIN
結合 (SQL Server) - SQL Server | Microsoft Learn
結合(セット連結) - UNION
UNION (Transact-SQL) - SQL Server | Microsoft Learn
NOLOCK
テーブル ヒント (Transact-SQL) - SQL Server | Microsoft Learn
ヒント句
オプティマイザ・ヒントの使用方法

この記事を書いた人


ニックネーム:いだちゃん
頑張ってる言語:JavaScript, Python
資格:メンタルヘルス・マネジメントⅢ
趣味:読書

好きな食べ物:クッキー(甘いものが好きです!)
一言:写真は卒業式のとき。ヘアアレンジは自分でやりました(^^)

ローコード開発とは?メリット・デメリットとOutSystemsのご紹介

ローコードのメリットデメリットとOutSystemsに関する記事の表紙画像みなさん、初めまして。株式会社シー・エス・エスのqwertyです。
突然ですが、ローコード開発という手法をご存知でしょうか。
ローコード開発とは、最小限のソースコードでアプリケーションを開発する手法のことです。近年では、このローコード開発という手法が注目されつつあります。
今回は、ローコード開発の概要と、私が現在扱っているOutSystemsというローコード開発用ツールについてご紹介させていただきます。

1. ローコード開発

1-1.ローコード開発とは

ローコード開発とは、ローコードツールを使用して極力ソースコードを書かずに、用意された部品をドラッグ&ドロップで組み合わせるなど、視覚的な操作により開発を行う手法のことです。
開発のイメージとしては、画面レイアウトはテンプレートや部品を組み合わせ、処理ロジックは部品を配置してフローチャート形式でつなげていき、足りない部品は自ら作成して開発を行っていく形になります。


出典:「ローコード開発」とは?今なぜ注目されているのか詳しく解説!

1-2.ローコード開発が注目される背景

近年、ローコード開発は拡大しており、2025年度には市場規模が1,000億円を超えるとの予測もあります。その背景として挙げられるのが、ITを取り巻く環境の変化にあります。
まず、1つの要因としてはDX(デジタルトランスフォーメーション)の推進です。
昨今、IoTやAIの進化やグローバル化によってビジネス環境の変化がより激しくなっています。それぞれの企業がDX化によりデジタルを活用することで、新しい価値を創造し、市場における競争力をつけてビジネス環境の変化に対応しなくてはなりません。こうした取り組みを迅速に行うには、従来の開発方法では限界があります。ビジネス環境の変化を汲み取り、それぞれの業務に適した使いやすいアプリケーション開発を迅速かつ柔軟に行うには、このローコード開発が必要だと期待されているわけです。

もう1つの要因としては、IT人材の不足です。
DXが推進される一方で、少子高齢化により労働人口は減少しており、IT人材の確保は非常に重要な課題だとされています。専門的なIT業務を担える技術者の確保は容易でなく、技術者の育成には時間もコストも要します。そこで、高度なプログラミングスキルが不要なローコード開発が注目されています。ローコード開発を導入することで、ある程度の技術的知識を要していれば、特別なプログラミングスキルを持たない人材でもアプリケーションの開発を担うことができるのです。

1-3.ローコード開発のメリット・デメリット

ローコード開発のメリット・デメリットとしては主に以下が挙げられます。

【メリット】

  • 迅速かつ柔軟な開発

コーディングでの開発と異なり、基本的に用意されている部品を組み合わせて開発を行うため、迅速な開発が行えます。また、コーディングを全くしないわけではないため、コードによるカスタマイズや拡張機能の導入などで柔軟に開発を行うことができます。

  • 高い専門性が不要

専門的なプログラミングスキルが不要なため、技術者の確保や育成がスムーズに進みやすくなります。また、コード記述による複雑なカスタマイズは少ないため、システムのブラックボックス化やコードの記述ミスを防ぎやすくなります。ツールによっては、自動で不具合を検知する等の仕組みもあるため、バグへの対応も簡単に素早く行うことができます。

  • コスト削減

高い専門性が不要で迅速な開発が可能であるということは、開発期間の短縮や作業工程の省略につながります。ひとつの開発に対する技術者を別の開発に割り振ったり、開発サイクルを短くしたりすることでコスト削減を実現することが可能になります。

【デメリット】

  • 開発の自由度が低い

従来の開発と比較すると、限られた範囲で開発を行うことになるため、複雑なシステムや特殊なシステムを開発する場合はコード記述による開発が適している場合があります。

  • 多少のプログラミング知識は必要

高度なプログラミングスキルは必要としないものの、微調整や多少複雑なシステムの構築を行う場合は、ある程度のプログラミング知識が必要になってきます。そのため、まったく知識がない状態での開発は厳しいこともあります。

  • パフォーマンスの問題

プラットフォームが提供する部品を組み合わせて開発していくため、ツールによっては処理速度の遅さが顕著になる場合があります。膨大なデータや複雑な処理ロジックを要するシステム開発では、パフォーマンスの低下が問題になる可能性があります。

2.OutSystems

2-1.OutSystemsとは

OutSystemsは、OutSystems社がリリースしたローコードプラットフォームです。
1つのプラットフォームでいくつものアプリケーションを統合して、設計から運用までシステムライフサイクルを効率的に管理することが可能です。

2-2.画面基本操作

OutSystemsでは、リアルタイムに反映される実画面を見ながらアプリケーションの開発を行うことができます。
以下画像はOutSystemsの開発画面になります。画面中央には構築するアプリケーションの画面が表示されています。左側のツールバーには、画面を構築するための部品があり、ドラッグ&ドロップで配置できます。右側のツールバーでは、画面や処理、データベースなどを定義することができます。
また、画面上部にある緑色のPublishボタンをクリックするだけでアプリケーションを更新し、公開することができます。
ただし、緑色のPublishボタンが赤いErrorsFoundボタンになっている際は、OutSystemsが自動で検知している不具合を修正するまで更新・公開することができません。

以下画像はロジックの作成画面になります。
OutSystemsではロジックを定義するアクション内で、フローチャートを描くように処理を作り上げていきます。Start(開始)は1つのみ設定できますが、End(終了)は処理の末端として複数設定できます。
また、End(終了)以外に作成したファイルのDownload、他の画面に遷移するDestinationなども処理の末端として複数設定できます。

2-3.開発サンプル

以下画像は、OutSystemsを用いて約1時間程度で作成した簡易的なダッシュボードになります。OutSystemsでは、OutSystemsが管理する内部DBが存在したり、グラフが部品として用意されていたりするため、データから画面の作成まで短時間で構築できます。

OutSystemsを体験したい方は、以下のOutSystems公式ホームページから無償トライアルを始めることをお勧めします。
www.outsystems.com


\システム開発なら株式会社シー・エス・エス

この記事を書いた人


【ニックネーム】
qwerty
【経歴】
入社2年目。
ローコード開発用ツールのOutSystemsを用いて、証券系のアプリケーション開発業務に携わっています。
【一言】
qwertyをパスワードにするのはやめておきましょう。

システムテストの実施 ~それぞれの工程で重要な点のまとめ~

システムテストで重要な点をまとめた記事の表紙画像

こんにちは。株式会社シー・エス・エス、保険システム課のちみりよです。

 

システムエンジニアとしてプログラミングや保守業務に携わってきたものの、テスト業務には関わったことがないという方も多いのではないでしょうか。

 

実際に、私はこれまで保守・運用・コーディングの業務を担当していたため、今回初めてシステムテストを経験をしました。
 
そこで、今回はそんな私が一連のテスト実施までの過程で気づき・学んだことを要点を絞ってお伝えできればと思っています。
※自分が担当した現場での作成方法につき、細かな部分は配属先によることを最初に記載しておきます。

1.システムテストとは

知っている方も多いかもしれませんが、システムテストとは、その名の通り、システムが要件通りの動きとなっているかを確認するテストのことです。

前提としては、大きい小さいにかかわらず、このテスト実施でバグが発覚することが多く、大変重要な作業ということです。

テストの種類の中には、モンキーテスト(実際に使う側はこんなことしないだろうと思われることを試してみるもの)というものもあります

※そのテストについては、テストを実施する側のこれまでの経験に大きく左右される部分もあるため、今回は割愛させていただきます。

1-2.システムテスト 全体の流れについて

システムテスト実施の大まかな流れについては以下になります。

 ①今回テストを実施するシステムの動きを理解する(設計書や要望書などの資料を見て)

 ②設計書をもとにテスト観点を洗い出す(設計書があればの場合。私の現場では設計書はあと納品でありませんでした)

 ③テスト仕様書を作成する

 ④テストを実施する

 ⑤レビュー依頼を出す

2.テスト観点作成について

 2-1.テスト観点の概要

テスト観点とは、テストをどのような観点で実施するかについて、ざっくりかつ漏れのないものを作成する工程になります。

テスト仕様書ほど詳細に書く必要はありませんが、ここで記載した観点をもとにテスト仕様書を作成するため、レビューする側にとってもとても重視するものになります。

 2-2.テスト観点で重要なこと

テストは、実施するものによって確認する観点が異なりますが、以下に一例を示しておきます。

記載にあたって共通して重要な点は、以下の3つになります。

 ①記載の粒度を統一すること

 ②(上記にも記載しましたが)漏れのない観点を作成すること

 ③この段階でも細かくレビューしてもらうこと

 

テスト観点作成において共通して言えることは、先にお伝えした通り、これをもとにテスト仕様書が作成されるため、 レビュワーにレビューしていただくこと(認識を合わせること)が非常に重要だということです。

3.テスト仕様書作成について

 3-1.テスト仕様書作成の概要

テスト仕様書とは、テストを実施するもととなる資料になります。テスト仕様書を作成する人とテストを実施する人が異なる場合もあるため、また、証跡をとるといった点で、誰が読んでもわかりやすい、観点に沿った、細かくわかりやすいものを作成する必要があります。

3-2.テスト仕様書作成で重要なこと

先に述べた通り、テスト仕様書の作成において重要なことは、誰が実施しようとしてもわかりやすいものを作成するということです。

※この点については、テスト実施者や作成者の好みの問題でもあるため、一概には言えないことにご留意ください。

この「分かりやすさ」とは、細かく書けばいいというものでもありません。例えば、取り込みファイルのファイル形式、文字数制限の確認、文字コードの確認など、単体、複合テストなど細かな部分をテストするにあたり、その手順を一つずつにテスト仕様書に記載することは大変です。

 

そういった場合は、マトリックス図を使用する、表を使用するなど、何度も書きますが誰がやってもわかりやすいものをということ重視して作成することが望ましいです。

 

テスト仕様書の作成方法だけに焦点を当てたブログもありますので、詳しく知りたい方はそちらもご覧ください。

blog.css-net.co.jp

4.テスト実施に当たって

4-1.テスト実施の概要

テスト実施に当たって忘れてはならないことは、そのシステムの挙動が要望、設計書通りに動くかどうかの確認をする作業であるということです。
実施に当たっては証跡(画面キャブチャ)を細かく取ることが必要となってきますが、それはあくまで誰がやっても同じ結果になるということを示す為でもあり、また おかしな点があった場合の証拠を残すためのものでもあります。

4-2.テスト実施にあたり重要なこと

重要なこととしては、証跡を細かく取る(画面キャプチャを細かく取る)ということです。また、テスト仕様書の他に、何か想定と異なる動きをした場合の動きを証明するためにも、必要となる部分のキャプチャなどがあれば 臨機応変に他の必要となる画面のキャプチャや追加のテストも実施し、証跡をとっておくことが重要です。
そしてレビュワーへの共有もとても重要です。

確認した結果、それが大きなバグの可能性もありますし、問題ない動きということもあります。しかし、問題ない範囲の挙動かどうかの判断は、自分で判断するのではないことを認識しておくとよいと思います。

【終わりに】細かく証跡をとることの重要性に気づいた

ここまでテストの流れや仕様書の記載の仕方、それぞれの重要な点について記載してきました。 実例を書こうとしましたが、こちらはそのシステムテストごとに異なるものと思ったため、記載を省略させていただきました。

その為わかりにくかったところも多かったかと思います。また、認識が異なる部分もあったかもしれません。その場合は、大変申し訳ありません。


私自身、これまで一連のテストの実施を行ったことがなく、社会人6年目で初めてテスト観点やテスト仕様書の作成、テストの実施を行いました。

 

特に証跡をとるところがとても細かな作業が必要で、やり方を教わったときは正直驚きました。しかし、実施をしている中で、その細かく証跡をとることの重要性に気づくことができました。

特にこれから初めてテスト観点やテスト仕様書の作成、テストの実施を行う方にとっては、配属先の作成・実施のルールがあったりといった点でも、はじめは大変だと思われます。
 
しかし、数をこなしているうちにと意外とすらすらと一連のテスト実施に当たる工程(観点の作成・仕様書の作成・実施)をできるようになるかと思うので安心してください。
 
このブログが、特にテスト実施を初めて行う方にとって、少しでもお役に立てれば幸いです。
 
長文にて、失礼いたしました。
ご一読いただきまして、大変ありがとうございました。
 
\システムエンジニア大募集/

この記事を書いた人

ニックネーム:ちみりよ

経歴:転職で株式会社シー・エス・エスに入社の2年目。社会人歴は(SE)6年目。

趣味:1人でいる時は、手書きで日記を書いたり、noteを書いたり、映画を見たりしています。土日は、友達と出かけたり、軽く飲みやカフェで話したりすることが多いです。最近は雑貨屋巡りにもハマっています。

性格:「見た目と中身にギャップがある」とか、周りやみんなから、会ってだいたい3回目で「不思議ちゃんだね」とコメントをもらいます笑

写真は、今年9月に下北のスープカレー屋さんに行った時の写真です。
行ったのは辛いもの好きな私に同僚が教えてくれた、辛さの選べるスープカレーのお店。食べるために真剣に予約票を入れている私の後ろ姿を、友人に隠し撮りされてました笑

【SIer・システム開発会社 選び方ガイド】3つのポイントと注意点で失敗しない

皆さんこんにちは、株式会社シー・エス・エスのサットンです。
この記事は「システムの開発・導入で業務効率化したい」「DX推進をしたい!」という企業の情シスさんや経営層の方々に向けた内容です。
システム開発会社は、企業の業務ニーズに応じたシステムを設計・開発・保守するサービスを提供する会社で、顧客の要望をヒアリングし、要件定義、設計、開発、テスト、運用といった一連の工程を担います。
システム開発を依頼する際、どの開発会社を選ぶべきか迷うことがあると思いますので、システム開発会社を選ぶ際の重要なポイントや注意点を紹介したいと思います。最適な開発パートナーが見つかるヒントになれば幸いです。

システム開発会社を選ぶポイント

選ぶポイントは大きく3つ。
開発実績の確認、専門分野と強み、担当者とのコミュニケーションです。

開発実績

まずは開発実績の確認です。
システム開発会社の過去の実績を確認し、似たシステムの開発経験があるかを見てみましょう。これにより、期待する成果が得られるかどうかを判断できます。
例えばあなたの会社で、リアルタイムに管理・更新できる商談予約システムの開発を検討している場合、過去にそういった開発の実績があり、顧客満足度が高い会社を選ぶことが重要です。
実績を見る際には、単に開発件数や取引先だけでなく、どのようなシステムを開発したのか、どのような技術が使われたのか、顧客からの評価はどうだったのかといった詳細な情報も確認しましょう。
各社ウェブサイトで、事例やケーススタディといった情報を提供しているはずですので、必ず確認して下さい。

専門分野と強み

次に、専門分野と強みの確認です。
システム開発会社を選ぶ際は、その会社が得意とする分野や技術を確認しましょう。自社のニーズに合った技術を持つ会社を選ぶことが重要です。
例えば、AIを活用したシステムを検討している場合は、AI技術の専門知識を持つ会社を選ぶべきです。
開発会社のウェブサイトや技術ブログ、社員の経歴などを参考に、専門分野や強みを把握しましょう。
ただ、目先の課題を解決するだけでなく、将来的なニーズにも対応できる一気通貫のサポート体制を持つ会社を選ぶこともポイントです。
例えば、デジタル化を進めるためのシステムを導入する場合、単にシステムを構築するだけでなく、データを蓄積する基盤を作れるかどうか、そのデータを使った分析環境を構築できるかどうかも重要です。
自社の業務やサービスが成長して新たなニーズが生まれたときにも、同じ開発会社が対応できれば、新たに別の会社を探す手間を省き、スムーズな運用が可能になります。こうした柔軟性を持つ開発会社は、単なる技術提供者ではなく、長期的なビジネスパートナーとしての価値を発揮します。
開発会社に直接問い合わせて、自社のニーズに合致する技術やノウハウを持っているか確認したり、無料相談なども活用してみましょう。

担当者とのコミュニケーション

システム開発の成功は、最初の打ち合わせや要件定義フェーズでほぼ決まるといっても過言ではありません。この段階での担当者とのコミュニケーションがスムーズに行えるかどうかが、プロジェクト全体を左右します。
無料相談や初期の打ち合わせを活用し、担当者の理解力、迅速な対応力、そして提案力をしっかりと確認しましょう。
特に重要なのは、担当者が自社の業務内容や課題をどれほど深く理解し、その課題をどのようにシステムに落とし込み成果を出すかです。ただ話しやすいだけではなく、実現可能なアイデアや価値ある提案を提供できる担当者かどうかがポイントとなります。

一番大事な要件定義で、コミュニケショーンが多く発生する

システム開発は、要件定義→設計→実装→テスト→運用の流れで進みますが、中でも要件定義フェーズが最も重要です。このフェーズでお客様の課題や目標がしっかりと定義されなければ、その後の工程が混乱を招き、最悪の場合プロジェクト自体が失敗する可能性があります。
要件定義を担当する、システムコンサルタントなど提案部隊の質が高い会社を選ぶことは、成功の鍵となります。課題を正確に把握し、実現可能で効果的なソリューションを提案できる会社であれば、プロジェクトはスムーズに進行し、期待以上の成果を上げることができます。
要件定義が不十分な場合、後戻りや仕様変更が多発し、コストや開発期間の増加を招くだけでなく、システムの導入効果も十分に発揮されません。
一方で、優れた要件定義を行うことで、システム開発は単なる作業ではなく、自社のビジネスを大きく成長させるプロセスとなります。
システム開発は単独で完結するものではなく、顧客と開発会社の緊密な連携が必要不可欠です。その中でも、提案力に優れた担当者や信頼できる提案部隊を持つ会社を選ぶことは、成功への第一歩となります。システム開発の相棒としてふさわしいパートナーを見つけることで、プロジェクトの未来が大きく変わるのです。

システム開発会社を選ぶ際の注意点

開発を丸投げしない

システム開発を外部に委託する場合、開発会社にすべてを丸投げしてしまうと、品質や納期が遅れるリスクがあります。そのため、自社内で進捗状況を常に把握し、定期的なミーティングを行うことが重要です。ミーティングでは、開発の進捗状況、課題、今後のスケジュールなどを確認しましょう。また、開発会社とのコミュニケーションを密にすることで、問題が発生した場合でも早期に解決することができます。

費用だけで判断しない

安価な見積もりに誘惑されないように注意しましょう。後から品質やサポート不足で後悔することもあります。
大切なのは、長期的な視点で品質やサポート体制を評価することです。高い品質を持つシステムや、迅速で丁寧なサポートを提供してくれる会社を選べば、トラブルのリスクを減らし、安心してシステムを使い続けることができます。
将来的なメリットをしっかり見極め、質の高いパートナーを選びましょう。

契約内容の確認

システム開発の契約書には、納期、支払条件、保証内容、責任範囲などが記載されています。契約前に、これらの内容をしっかりと確認し、不明な点は事前に開発会社に確認・修正を依頼しましょう。
特に、納期や支払条件については、明確な合意を得ることが重要です。また、保証内容や責任範囲についても、しっかりと確認しておくことで、トラブル発生時の対応をスムーズに行うことができます。

まとめ

ここまで、システム開発会社の選び方について重要なポイントと注意点を解説してきました。最後におさらいです。

重要なポイント

  1. 開発実績

  2. 専門分野と強み

  3. 担当者とのコミュニケーション

特にコミュニケーションが多く発生するのが要件定義フェーズ。このフェーズを担う担当者、システムコンサルタントや提案部隊とのスムーズなコミュニケーションがプロジェクトの成功を左右します。無料相談や最初の打合せで感触を確かめましょう。

注意点

  1. 開発を丸投げしない
  2. 費用だけで判断しない
  3. 契約内容の確認

システム開発会社を選ぶことは、自社のビジネスにとって非常に重要な決断です。
この記事で紹介したポイントを参考に、慎重に開発会社を選定し、プロジェクトの成功を目指して下さいね。

おすすめのシステム開発会社一覧は以下より確認できますので、ご参考までにチェックしてみてください!

rank-quest.jp

\システム開発なら、株式会社シー・エス・エスへ/

この記事の担当

デジタル・マーケティング部

ニックネーム:サットン
経歴:大学卒業後はフォワーダーとして国際貨物の輸送業務に従事。その後プログラミングとデザインを学びWebデザイナーにキャリアチェンジ。中小企業のコーポレートサイト制作を通じてWebマーケティングにも携わるようになる。現在はシステム開発会社、株式会社シー・エス・エスのデジタル・マーケティング部でIT関連のお役立ち情報を届けている。
好きなもの:犬、古畑任三郎、音楽
一言:高校時代にガールズバンドを組んでいました。カラオケの十八番は、相川七瀬の夢見る少女じゃいられないです!

【社会保険の基礎知識】保険料や健康保険で得られるサービスについて

こんにちは。株式会社シー・エス・エス、エンタープライズ・ソリューション開発一課の二年目、NTです。
私は配属から約一年、社会保険システムの保守をしています。社会保険のシステムを担当するにあたり、業務についてしっかり把握する必要があります。そこで得た知識を、今回皆様にご案内しようと思います。

社会人になると、初めて自分の給与から税金や社会保険料が引かれて
「こんなに引かれるの!?」と思ったことのある人も多いのではないでしょうか。
ただ、それでもそのお金が何に使われていて、自分たちにどのようなサービスが提供されているのか調べた人は少ないと思います。
実際、私も業務を通して社会保険について知識を増やしてきましたが、 実生活であまり情報を得る機会がないなと思っていました。

そこで、今回は社会保険の基礎知識についてお話させていただこうと思います。

1.社会保険の基礎知識① 社会保険料について

社会保険料は、まず4月~6月の給与支給額の平均をもとに算出された標準報酬月額と保険料率から決定されます。

標準報酬月額とは、社会保険料を計算しやすいように、給与を金額毎に50等級に分割したものです。
そしてこの標準報酬月額は、9月~翌年8月まで適用され、標準報酬月額にそれぞれの保険料率をかけた金額の半分(事業主と折半)が保険料として課されます。

 

2.社会保険の基礎知識② 健康保険で得られるサービスについて

2-1. 高額療養費・付加金

高額療養費は、受けた治療の医療費が高額になり、自己負担額が一定額(自己負担限度額)以上となった場合に、
健康保険組合から「高額療養費」の支給を受けることができるという制度です。
そしてこれは国で定められた制度ですが、さらに健康保険組合によって高額療養費の支給に加えて、付加金を支給する健康保険組合もあります。

当社が加入している健康保険組合(TJK)では、2万円を超える自己負担額に対して「付加金」が支給されるので、実質負担は2万円で済むということになります。

高額療養費・付加金はおよそ数か月後に給付金として支給されるので、病院の窓口では高額の医療費を払わなくてはなりません。
そんな時に、健康保険組合から限度額認定証を交付してもらうことで、窓口での負担金を最初から自己負担限度額のみにすることができます。
限度額認定証を交付してもらうには、健康保険組合に申請が必要になるので、医療費が高額になることが分かった時点で申請するのが良いです。
※マイナ保険証を利用している場合、限度額認定証が不要になることもあるので加入している健康保険組合サイトを確認してみてください。

また高額療養費の計算方法などは、弊社エンタープライズソリューション部の鈴木さんが書いたブログで詳しく説明されているので、こちらを参照してみてください。

2-2. 傷病手当金

傷病手当金は、下記4つの要件に該当している場合に健康保険組合に請求できる給付金です。

①業務外の事由による病気やけがの療養のために仕事を休んでいること
②仕事に就くことができない状態であること
③連続する3日間を含み4日以上仕事を休んでいること
④休んでいる期間について給与の支払いがないこと

2-3. 健康診断

先ほど、3割負担という言葉がでてきましたが、健康診断は保険適用外になるため、全額自己負担しなければなりません。
しかし労働安全衛生法第66条に基づいて事業者は労働者に対して健康診断を実施しなければならず、労働者は受診する義務があります。
そこで各健康保険組合は、年一回など回数を制限して健康診断の費用の一部を負担するというサービスを提供しています。

当社が加入している健康保険組合(TJK)では、被扶養者が無料で受けることのできるD検診などが提供されています。
詳しくは、健康保険組合のホームページから年齢や性別によって受けられる検診の種類が調べられるので確認してみてください。

2-4. 保養施設

保養施設は、健康保険組合に加入している被保険者本人や家族が比較的安い料金で利用することができる宿泊施設のことです。

当社が加入している健康保険組合(TJK)では、2024年度で全国の保養施設として145か所が利用可能となっています。
ぜひ、行ってみたい地域に保養施設があるかホームページから確認してみてください。

 

3.終わりに

今回は、社会保険の基礎知識についてお話させていただきました。
僕自身、知らないことも多いですが、これからも少しずつ知識を蓄えて業務に向かっていきたいと思います。

皆さんも若いうちは健康保険組合のサービスを利用する機会は少ないかと思いますが、
いずれ利用する機会が訪れると思いますので、そのような時に知らなかったとならないように知識を得るきっかけになれば良いなと思います。

 

\システム開発なら、株式会社シー・エス・エスへ/

4.この記事を書いた人

【ニックネーム】NT

【経歴】入社2年目
配属以降、JCLやアセンブラ、COBOLといったホストで使われる言語を学びながら、社会保険システムの保守業務に従事しています。
【好きなこと】ゲームと甘いスイーツ
【ひと言】プロフィールの写真は、私が去年、山梨に旅行に行った際に撮った最高傑作です。ぜひ見てください。

 

【不動産会社のデジタル化】第一歩の踏み出し方

 

こんにちは。デジタル・マーケティング部の水信です。ここ数年、デジタル化による業務効率化や顧客満足度の向上が期待されていますが、どこから始めたら良いか様々な業種の方からお問い合わせを頂きます。不動産会社もデジタル化の波に直面しているようです。本記事では、不動産会社のデジタル化における重要なポイントと取り組み方をご紹介します。 

不動産会社のデジタル化の必要性

アナログからデジタルへのシフト

不動産会社の多くの業務は依然として紙ベースで行われています。これをデジタル化することで業務効率化が図れます。従来の紙ベースの業務では、書類作成や保管、データ管理などに多くの時間と労力を要していました。デジタル化により、これらの業務を効率的に行うことが可能となり、業務全体の効率化に貢献します。例えば、物件情報の管理をデジタル化することで、情報の共有や検索が容易になり、顧客への対応も迅速化できます。また、契約書などの書類作成もデジタル化することで、作成時間やミスを減らすことができます。さらに、デジタル化により、データ分析や可視化も容易になり、業務の改善や意思決定にも役立ちます。

人手不足に対する解決策

デジタル化により作業時間の短縮が可能となり、人手不足の問題を緩和できます。不動産会社では、近年、人手不足が深刻化しており、業務の効率化が課題となっています。デジタル化により、多くの業務を自動化したり、効率化したりすることで、人手不足の解消に貢献できます。例えば、物件情報の入力や顧客情報の管理などを自動化することで、従業員の負担を軽減し、より重要な業務に集中できるようになります。また、デジタルツールを活用することで、遠隔地からの業務や顧客対応も可能となり、人材の活用範囲を広げることができます。

業務の非対面化の重要性

デジタルツールの活用により非対面での業務が実現し、顧客対応の柔軟性が向上します。不動産会社では、顧客とのやり取りに多くの時間を費やしていました。デジタルツールを活用することで、非対面での顧客対応が可能となり、顧客の利便性向上と業務効率化を同時に実現できます。例えば、オンラインでの物件見学や契約手続き、チャットボットによる顧客対応など、デジタルツールを活用することで、顧客は時間や場所に縛られることなく、必要な情報やサービスを受けられるようになります。また、非対面での業務により、顧客対応の柔軟性も向上します。

デジタル化によるメリット

業務効率化

デジタル化により多くの業務が自動化され、効率的に進めることができます。不動産会社では、物件情報の管理、顧客管理、契約処理など、多くの業務がデジタル化によって効率化されます。例えば、物件情報の入力や更新を自動化することで、情報の正確性と迅速性を高めることができます。また、顧客管理システムを導入することで、顧客情報の管理や分析が容易になり、顧客満足度の向上に繋げることができます。さらに、契約処理をデジタル化することで、紙ベースの書類作成や郵送の手間を省き、契約締結までの時間を短縮できます。

労働環境の向上

デジタル化により負担が軽減され、従業員の労働環境が改善されます。不動産会社では、従来、多くの業務が手作業で行われており、従業員の負担が大きくなっていました。デジタル化により、業務の自動化や効率化が進み、従業員の負担を軽減することができます。例えば、物件情報の入力や顧客対応などを自動化することで、従業員はより創造的な業務に集中できるようになります。また、デジタルツールを活用することで、従業員は場所を選ばずに業務を行うことができ、ワークライフバランスの向上にも繋がります。

顧客満足度の向上

デジタル化により迅速な対応が可能となり、顧客満足度が向上します。不動産会社では、顧客のニーズを迅速かつ的確に把握することが重要です。デジタル化により、顧客とのコミュニケーションを円滑化し、顧客のニーズを的確に把握することができます。例えば、チャットボットやAIを活用することで、顧客からの問い合わせに迅速に対応することができます。また、顧客向けのアプリやウェブサイトを導入することで、顧客はいつでも必要な情報にアクセスすることができ、満足度が向上します。さらに、デジタル化により、顧客の行動履歴や購買履歴などのデータを分析することが可能となり、顧客のニーズに合わせたサービスを提供することができます。

▷当社デジタル化支援のご紹介はこちら

https://www.css-net.co.jp/service/digital

不動産会社のデジタル化成功事例

三井不動産のデジタル化戦略

三井不動産グループはデジタルプラットフォームを活用し、顧客対応の迅速化を図っています。顧客とのコミュニケーションを強化するために、デジタルプラットフォームを導入し、顧客は物件情報や周辺環境情報などを簡単に取得することができます。また、オンラインでの物件見学や契約手続きも可能となり、顧客の利便性が向上しています。さらに、顧客からの問い合わせに迅速に対応するために、チャットボットやAIを活用しています。これらの取り組みによって、顧客満足度が向上し、顧客との関係強化に繋がっています。

東急不動産のイノベーション

東急不動産グループはAIを導入し、予測データを元に効率的な業務運営をしています。東急不動産は、AIを活用することで、物件の価格予測や需要予測などを実施しています。これらの予測データに基づいて、物件の販売戦略や開発戦略を策定することで、より効率的な業務運営を実現しています。また、AIを活用することで、顧客のニーズをより深く理解し、顧客満足度の向上に繋げています。

デジタル化のための第一歩

目標の明確化

デジタル化の目的や期待する効果を明確にし、それに基づいて計画を立てることが重要です。デジタル化を進める前に、まず、デジタル化によって何を達成したいのか、どのような効果を期待するのかを明確にする必要があります。例えば、業務効率化、人手不足の解消、顧客満足度の向上など、具体的な目標を設定することで、デジタル化の取り組みを効果的に進めることができます。

適切なツールの選定

目的に合ったデジタルツールを選び、それを効果的に活用する方法を考えましょう。デジタルツールは数多く存在するため、目的に合ったツールを選ぶことが重要です。例えば、物件情報の管理には、物件管理システム、顧客管理には、顧客管理システム、契約処理には、電子契約システムなど、それぞれの業務に最適なツールがあります。また、ツールを導入するだけでなく、それを効果的に活用する方法を検討することも重要です。

持続可能な体制の構築

デジタル化を長期的に継続するための組織内の体制を整備することも必要です。デジタル化は、単にツールを導入するだけでなく、組織全体で取り組む必要があります。そのため、デジタル化を推進するための組織体制を整備し、人材育成や情報共有などを積極的に行うことが重要です。また、デジタル化の進捗状況を定期的に評価し、必要に応じて改善策を検討していくことも重要です。

【まとめ】目標の明確化、適切なツール選定、持続可能な体制構築が重要

不動産会社のデジタル化は避けられないトレンドであり、早急に着手することが求められます。適切な計画と取り組みを持って、順調にデジタル化を進めましょう。不動産会社は、従来、アナログな業務が中心でしたが、近年、デジタル化が急速に進んでいます。デジタル化は、業務効率化、人手不足の解消、顧客満足度の向上など、多くのメリットをもたらします。そのため、不動産会社では、デジタル化を積極的に推進していく必要があります。デジタル化を進めるには、まず、目標を明確にし、適切なツールを選定し、持続可能な体制を構築することが重要です。これらの取り組みによって、不動産会社は、より効率的で顧客満足度の高いサービスを提供できるようになります。

 

  ▷お役立ち資料「デジタル化最初の一歩」はこちら

https://www.css-net.co.jp/document/20231227_005 

 

システム開発のご質問などはお気軽にお問い合わせください。

この記事の担当

デジタル・マーケティング部  水信 安弘

好きなもの:炭酸飲料

ルーティーン:朝食は卵でタンパク質の摂取を心がけています。

一言:私はノーネクタイにすっかり慣れてしまいましたが、外でネクタイ姿を見かけると格好が良いと思うことがありますね。

ウォーターフォール開発の工程と案件遂行のコツ


はじめまして。ファイナンシャル・ソリューション開発部の赤坂です。
私は主に案件遂行の仕事をしているのですが、案件遂行はプロジェクトの全体像が見えないとなかなか難しいものがあります。そこで今回は、プロジェクト(=案件)の基本となるウォーターフォール開発を解説しながら案件遂行で気を付けることを書いていこうと思います。

1.ウォーターフォール型開発とは?

ウォーターフォール(英語:Waterfall)とは、日本語で訳すと「滝」を表します。開発現場で利用するシステム開発手法であり、その名の通り滝のように上流工程から下流工程にそって順番に開発を進める手法です。ウォーターフォール開発は、工程ごとに成果物を完了させていき、基本的には前の工程に戻らないのが前提です(そう上手くはいきませんが…)。そのため、各工程ごとに開発担当者や関係者が成果物を確認し、双方で合意を取りながら工程を完了させていきます▼。
開発スピードが重視されるWeb開発ではアジャイル型開発が主流ですが、基幹システムなど、要件が明確で変更が少ないプロジェクトではウォーターフォール型開発が適しています。
▼アジャイル開発について知りたい方へ
blog.css-net.co.jp

2.ウォーターフォール型開発の主な工程

ウォーターフォール開発は1章の通り、上から下に流れるようにプロジェクトを進めていく必要があります。基本的な工程は、現場によって多少の差はありますが、「要件定義」「基本設計」「開発・単体テスト」「結合テスト」「リリース」 の工程を順番に進めていくのが特徴です。

3.要件定義

こちらは、このプロジェクトは何を実現したいのか、どのような機能を開発するかを決める工程です。現場によって作業内容は異なり、お客様が全て要件定義を書くケースもあれば、打ち合わせをしながら要件定義を決めていくケースもあります。私の現場では前者で、お客様より要件をいただいたら、プロジェクトが本格始動する流れです。

WBSを作成し、概要とスケジュールをメンバへ説明

お客様より要件定義をいただいて案件化されたら、スケジュールを決めてメンバに知らせる必要があります。WBS(作業分解図)を作成してプロジェクトの成果物と期間を可視化し、プロジェクトメンバへ概要とスケジュールを説明します。私の現場はテレワークなので、メールやチャットで「見ておいて」と振ることもできますが、個人的にはキックオフミーティングの開催をおすすめします。話したほうが伝わりやすいと思いますし、メンバにも「困ったときは通話して聞いていいんだ」と思ってもらえる効果もあり。何事も始めは大事ですからね。

4.基本設計

次の工程は基本設計です。概要設計書・基本設計書・変更概要書など、色々な呼び方はありますが、要件定義を基にシステムの仕様(できること)や制約(できないこと)を決める工程になります。

この段階でテスト概要や実施リスクなども考える

また基本設計と言いながら、この段階でテスト概要や実施リスクなども考える必要がある為、チャットなどで開発者・テストメンバ・運用メンバにも意見を聞きながらプロジェクト全体の青写真を考える必要があります。

5.開発・単体テスト

ちょっと待て!基本設計の次は詳細設計じゃないんかい?と思ったそこのあなたは正しいです。しかし、私の出向先には詳細設計の工程はありません!
その為、基本設計の内容をもう少しシステム寄りにして開発メンバに説明する必要はあります。開発メンバがわかるように、文字だけで伝わらなければ図を載せて説明するなど丁寧な説明が必要になります。まあ、私は出向先のプログラムや環境は分かりませんし、権限も無いので開発メンバに全てお任せなのですが、開発中に上がってきた質問や製造方針については顧客との橋渡しも必要になるので、ある程度の知識は必要になるのと、分からないことは分からないまま橋渡しせず、自身でも内容を把握してから橋渡ししないと後々大変なことになります。。。

6.結合テスト・総合テスト

開発が終わったらテストです。問題なくテストが進めばよいのですが、何か想定外の結果が出たときは、テスターから詳しい事象を聞く→テスト方法がおかしいのか、プログラムがおかしいのか判断する→開発メンバにフィードバックすると、各メンバ間の橋渡しが必要になってきます。

丁寧な橋渡しと進捗管理がカギ

この時も、「今起きている結果」と「本来想定していた結果」をきちんと伝えないと各メンバも動くに動けないので、丸投げせずに丁寧な文章や図で事象を説明して橋渡しすることが大事です。
そして、上記のほかに進捗管理も必要になってきます。定期的に進捗具合を聞いて、メンバ増員やスケジュール調整など、早めに動くことが重要です。

7.リリース

テストが終わってゴールも見えてきましたが、この工程は油断できません。リリース日が一番忙しいといっても過言ではありません(※案件によっては過言です)。どんなに開発環境でテストをしても本番では予期せぬ事態が発生することもありますし、その場合のコンチプランも入念に計画しておく必要があります。

8.さいごに 【こまめな連絡と丁寧な橋渡しが大事】

長々と書いてきましたが、案件遂行で大事なのはこまめな連携と、伝わりやすい文章や図を用いての橋渡しを意識することと思います。案件がどのように動いているのかを少しでもイメージしていただけたり、案件遂行業務に興味を持っていただけたら幸いです。

9.関連記事
【初心者さん向けにソフトウェア開発についてわかりやすく解説!】

ウォーターフォール開発に限らず、ソフトウェア開発の全体像や種類、開発工程や必要スキルなどを知りたい方はこちらの記事もご覧ください。
nocoderi.co.jp


\システム開発なら、株式会社シー・エス・エスへ/

この記事を書いた人


【ニックネーム】:赤坂
【経歴】:入社以降、ひたすら投信・証券系システムのお仕事をしておます。
【一言】:老後に向けて貯金しなきゃと思いつつ、体力低下や体調不良、老眼の進行によりもはや今が既に老後なのでは?と自問する日々。

Google Formsでフォームを自社サイトに、簡単にかっこよく実装する方法


こんにちは、テクノロジーコンサルティング課のゴマ太郎です。

今回は Google Forms を用いてフォームを自社サイトに、簡単にかっこよく、実装する方法を紹介します。
いざ自力で実装しようとすると、回答を蓄積する DB の設定や回答があった際の通知処理など、フォームのフロントエンド実装の他にも考えることが多く出てきます。そのようなバックエンドの面倒事については考えず、楽をしたいという方に向けての記事になります。

1. Google Forms の実装パターン

1-1. 実装パターン

Google Forms を用いたサイトへのフォーム実装パターンは大きく3つあります。
※ 私が知らないだけで他にもあるかもしれません

① Google Forms に遷移させる
aタグ等で素の Google Forms に遷移させ、そこで回答してもらうパターンです。

② Google Forms を埋め込む
自作ページに Google Forms の埋め込みコードを記述するパターン
iframeタグでページの一部に Google Forms のフレームが表示されます。

③ Google Forms に重ねる
Google Forms と同じ質問項目を自作ページに用意し、送信に使用される属性値に Google Forms の属性値をコピーするパターンです。
ユーザからは自作のページにしか見えませんが、その回答の送信先は Google Forms になっているという仕組みになります。
デスノートでもこれを使ったトリックで名前を書かせるシーンがあった気がしますね。

1-2. 各パターンの比較

前節で紹介した3パターンには以下のような特徴があります。
実装担当者のスキルや、重視したい点によって最適なものを選択してください。


① 遷移させる②埋め込む③重ねる
実装コスト
UI のカスタマイズ性
フォームの編集
仕様変更への対応
SEO 対策


実装コスト
実装にかかる時間や必要となる技術的コストの観点で比べると、①②が容易で、③は比較的難易度が高いほうになります。
次の章で細かい実装方法については解説しますが、①と②は Google Forms を作成したらその URL や 埋め込みコード をコピペするだけで実装されます。それに対し③は自作ページにもフォームを作成し、その属性値をいじる必要があるため少々知識が必要になってきます。


UI のカスタマイズ性
UI のカスタマイズ性、すなわちデザインの自由度の観点で比べると、③ > ② > ① の順になります。
回答者目線だと、③は Google Forms を使っていることすらバレにくく、②でもフレーム外のデザインは自分でカスタム作成できるため比較的サイトイメージを崩さずに実装ができます。①に関しては完全に Google Forms のページに遷移させるのでバレバレですね。


フォームの編集
フォームの編集、すなわち質問文や選択肢の情報変更がしやすいかどうかになります。
こちらですと①②は Google Forms を編集すれば自動で反映されますが、③だと属性値も変わってしまう可能性があるため、属性値の修正も必要になることがあります。


仕様変更への対応
③はやや無理矢理で Google 公認の実装方法ではないため、 Google Forms 側で仕様の変更があった際には正常に動作しなくなるリスクがあります。
それに対し①②は Google Forms 側で用意している機能を使っているため、仕様変更により使えなくなるといったリスクは比較的低いかと思われます。


SEO 対策
SEO 対策を重要視している場合には、③ > ② > ① の順になるかと思われます。
①は一度他のサイト(Google Forms)にリダイレクトしているため、サイトの滞在時間やページビューが減少し、 SEO に悪影響を及ぼす可能性があります。
②ではユーザはサイト内で操作を続けることができるため、滞在時間やページビューが向上する可能性があり SEO にはプラスです。ただしフォームの内容やメタデータが Google によってインデックスされないため、フォーム自体の内容は SEO には寄与しません。
③の方法では、フォームは完全に自作サイト上でホストされるため、フォーム内容が直接 SEO に貢献します。さらにユーザは外部サイトに移動することなく、サイト内で操作を完結できるため、滞在時間や UX の向上にもつながります。


2. 実装方法

2-1. ① Google Forms に遷移させる


Google Forms を作成する


共有リンクを取得する



自作サイトに Google Forms への遷移リンクを作成する
<body>
<a href="https://forms.gle/abcdefg1234567">Google Forms に遷移</a>
</body>


以上が ① Google Forms に遷移させる の実装手順となります。

2-2. ② Google Forms を埋め込む

Google Forms を作成する
前節と同様

埋め込みコードを取得する



自作サイトに 埋め込みコード を貼り付ける

<body>
<iframe src="https://docs.google.com/forms/d/e/abcdefghijklmn1234567890/viewform?embedded=true" width="500" height="600" frameborder="0" marginheight="0" marginwidth="0">読み込んでいます…</iframe>
</body>

以上が ② Google Forms を埋め込む の実装手順となり、実装後は下図のようになります。
※ 埋め込み箇所が分かりやすいよう、ページに背景色をつけています。

2-3. ③ Google Forms に重ねる


この実装方法には、フォームページを自作ページにカスタマイズしただけでは、入力エラー時や送信完了時に Google Forms のページに遷移してしまうという注意点があります。送信完了画面(サンクスページ)のカスタマイズ方法は検索するとすぐに出てきて解決しますが、入力エラー画面のカスタマイズ方法について紹介している記事はなかなか見つけられませんでした。送信前に自作の入力チェックを挟む方法についても、気が向いたら調査して記事にできればと思います。


Google Forms を作成する
前節と同様

プレビューモードで開く


開発者ツールを開く
F12キーを押し、開発者ツールを開きます

必要となる属性値を確認する
Ctrl + F で検索ボックスを出し、「<form」で検索、 form タグの action 属性を確認


「entry.」で検索、各フィールドの name 属性を確認


ラジオボタンは一度選択状態にするとフィールドが出現し、確認できるようになります


自作フォームを作成する
Google Forms に重ねたいフォームを作成します。
form タグの action 属性と、各フィールドの name 属性には、先ほど確認した属性値をセットしてください。

<body>
<form action="https://docs.google.com/forms/u/0/d/e/abcdefghijklmn1234567890/formResponse" method="POST">
<div>
<p>今日の朝食は何でしたか?</p>
<input type="text" name="entry.1675098666">
</div>
<div>
<p>今日の夕食は何ですか?</p>
<input type="text" name="entry.1528919465">
</div>
<div>
<p>米派?パン派?</p>
<label><input type="radio" name="entry.127213574" value="米">米</label>
<label><input type="radio" name="entry.127213574" value="パン">パン</label>
</div>
<button>送信</button>
</form>
</body>

以上が ③ Google Forms に重ねる の実装手順となります。

3. 最後に

今回は Google Forms と自作サイトの連携 について、各パターンの特徴と実装方法について紹介しました。
最後の ③ のパターンについては注意点もありましたが、 Google Forms を使うとフォームの実装が楽になるだけでなく、スプレッドシート出力によるデータ集計や、回答があった際に通知を受け取る設定など便利な機能が自身で実装せずとも利用できます。是非お試しください。


\システム開発なら、株式会社シー・エス・エスへ/

この記事を書いた人


ニックネーム
ゴマ太郎
経歴
新卒入社3年目(22卒)
昨年度までイノベーションLABにて技術調査を担当しておりましたが、今年度から新設されたテクノロジー・コンサルティング課(通称:TC課)へ異動となりました。今はセールスエンジニアとして提案活動をしながら引き続き技術調査も行っております。
一言
最近ピックルボールというスポーツを始めました。マイナーラケットスポーツが好きです。

C言語とは? Javaとの違いやポインタ変数について解説


皆さん初めまして。株式会社シー・エス・エスのヤマ男です。
先日C言語について学習する機会があったので、私自身の備忘録も兼ねて学んだ内容を紹介したいと思います。

本記事では特に私が苦戦したJavaとの違いについて注目して記載してみます。

1. 対象読者

このブログの内容は主に以下の方を対象読者としています。

  • C言語初学者
  • Java経験者(もしくは他言語経験者)
  • CとJavaの違いについて軽く知りたい人

2. C言語を学習するに至った経緯

2-1. C言語初学者

大学ではJavaとPythonを主に勉強し、社会人になって初配属の現場の使用言語もJavaだったため、これまでC言語については未経験同然でした。

2-2. 環境の変化

社会人2年目の途中で現場が変わることになりました。そしてその新しい現場ではなんと、JavaだけではなくC言語を用いた開発も行っていました。
JavaやPythonと共通している内容の範囲内であればあまり問題はありませんでしたが、「ポインタ」というものが一切分からず、当初非常に苦労をしました。

2-3. 学習する必要が生まれた

これまではC言語について、「ちょっと古めなプログラミング言語」「Javaと比べて難しそう」という認識程度しか持ち合わせていませんでした。
しかし、今回の件で今後もエンジニアとして働く上でこれまでの認識、知識のままではまずいかなと危機感を覚えました。
ということで、一度0からC言語を学んでみようと思ったのが今回の経緯です。

3. C言語とは

C言語を学習するにあたってまずはC言語に少しでも興味を持たなければと思い、
「C言語とはどんな言語なのか」について調べてみました。
(お恥ずかしながら興味が無いものに対してはどんなに勉強しても頭に入らない人間なので。。。)

3-1. C言語の特徴

  • 長寿

1970年代に作られたUNIX(OS)を様々な機種に移植できるよう開発されたのがC言語です。
アセンブリ言語とは異なり、人間が理解しやすい高級言語で、コンピュータ制御からシステム開発まで幅広い分野で長年使用されている汎用性の高い現役のプログラミング言語です。

  • 汎用性が高い

C言語は他言語(Java等)と同じくシステム開発でも利用出来る他、メモリ管理やポインター演算等、ハードウェアの制御にも向いている言語です。
また、OSに依存しないという点も特徴の一つです。
幅広い分野で活用でき、環境にも依存しないため、C言語は様々な業界から長年重宝され続けているプログラミング言語であると言えます。

  • 実行速度が早い

C言語はコンパイル方式を利用しているのと、効率よく機械語へ翻訳できるよう設計されているため、他言語と比べ処理速度が早いのが特徴です。

  • 難しい

現役のプログラミング言語の母的な存在なC言語ですが、コンピュータ制御が可能な分、Java等では意識しなくても良い部分も制御出来てしまうため習得が難しめな言語であるといわれています。
ただ、C言語の文法自体は簡潔で、他言語もC言語から影響を受けている箇所があるため、C言語を習得したら他言語の習得も幾分か楽になるみたいです。

3-2. Tips

「C++」と「C#」

C言語というと「C」の他に「C++」と「C#」があります。
それぞれの特徴については以下の通りです。

  • C++

C言語にオブジェクト指向機能を拡張した上位互換の言語。ただ、出来ることが広がった代わりに仕様が複雑になってしまっている。

  • C#

C++から派生して生まれたオブジェクト指向言語。Javaに文法が似ている。マイクロソフト社が開発した言語でVisual Studioが使用できるため、GUIアプリの開発に向いている。
ーーー
名前が似ているというと、JavaとJavaScriptを思い浮かべますが、これらとは違ってそれぞれ繋がりはあるようです。

「C言語」の前身

C言語の名前の由来は「B言語」の次に作られた言語であるためです。
※ちなみにB言語の前に「A言語」があると言う訳ではなく、BCPLというプログラミング言語を元にしたからだそうです。
ーーー
「D言語」というC言語の後継言語も開発されているみたいです。


4. Javaとの違い

さて、ここまで長くなってしまいましたが、いよいよ本題です。
以下に私が勉強をしていて、「特にJavaと違う」と思ったところについて重要度(※個人的偏見)も併せて紹介していきます。

4-1. ポインタ (ポインタ変数) (重要度:★★★)

C言語ではアドレスをデータとして扱います。
そのアドレスを保持する変数が「ポインタ変数」です。

では、次に「ポインタ変数」をどう使うのかという点ですが、
以下変数について理解していただけると分かりやすいかと思います。
 ・名前 (例:num, hoge)
 ・値 (例:10, 'a')
 ・アドレス (例:0x7aaf060ebb68)
ソースコード上の変数とは上記3種類の情報を持っています。
「アドレスって何?」となる方はコインロッカーを思い浮かべてもらうと分かりやすいかもしれません。

int num = 10;
char hoge = 'a';

上記変数宣言では、「num」という箱に値「10」を入れて、メモリ上(例:コインロッカー)のどこかへ保持しておくということをしています。
Javaで開発しているとメモリ上の在り処について意識することはありませんが、C言語では
ポインタ変数」というものを使って、変数numの値を直接参照・操作することができるのです。

int num = 10;
char hoge = 'a';
/* ポインタ変数宣言 */
int *p_num = &num; // 変数numのアドレスを取得
char *p_hoge = &hoge; // 変数hogeのアドレスを取得

ポインタ変数の宣言時にはポインタ変数であることを示す「*」を変数名の前に付けます。
変数のアドレスは変数の前に「&」を付けて変数参照することで取得する事が出来ます。

これによるメリットは以下があります。
呼び出した関数から2つ以上の値を返してもらえる。(アドレス渡し)
 →return文では一つしか値を返せないが、ポインタ変数を引数に渡してあげることで、
  アドレス先の値を直接更新してもらうことで、値を複数操作できる。
  (データ受け渡し用のクラス(=DTO)を用意すればJavaでも複数値受け取ることは可能)

構造体のデータをポインタ変数1つで取得可能。
 →構造体のアドレスを取得して、「ポインタ変数->メンバ」とアローダイアグラムを使用するこ
  とで、構造体内部のメンバを取得する事が出来る。

/* 構造体の宣言 */
typedef struct {
    int num;
    char alphabet;
} Sample;

void main(void) {
    Sample sample = {10, 'a'};
    Sample *p_sample = &sample; // 構造体のアドレスを取得
    printf("sampleのnumは%dです。", p_sample->num); 
}

/* 結果 */
sampleのnumは10です。


関数ポインタを使用することで呼び出す関数を動的に実装することが可能。
 →関数が格納されているアドレスをポインタ変数へ代入することで、配列の要素に関数を
  埋め込むことが出来る。

#include <stdio.h>

int add(int num1, int num2) {
    return num1 + num2;
}

int multi(int num1, int num2) {
    return num1 * num2;
}

/* 関数ポインタの定義 */
int (* p_FuncArray[2] ) ( int, int ) = { &add, &multi };

void main(void) {
    // add呼び出し
    printf("add:%d\n", p_FuncArray[0](2, 5) );

    // multi呼び出し
    printf("multi:%d", p_FuncArray[1](2, 5) );
}

/* 結果 */
add:7
multi:10

4-2. プロトタイプ宣言 (重要度:★★☆)

Javaでは関数を定義したらそのまま使用(=コンパイル)出来ましたが、
C言語ではコードの上から順に読み込むため、使用箇所よりも後ろに定義されているとコンパイルエラーが起きてしまいます。

#include <stdio.h>

void main(void) {
    // add呼び出し
    int ans = add(2, 5);
    printf("add:%d\n", ans );
}

int add(int num1, int num2) {
    return num1 + num2;
}

/* 結果 */
コンパイルエラーが起きる

そのためC言語では「プロトタイプ宣言」といって、
ソースコードの冒頭部分で関数の宣言だけ行い、定義は後でする必要があります。
 →同ファイル内にプロトタイプ宣言も可能だが、ヘッダファイル(.h)に宣言してincludeする
  方式の方をよく見かける。

#include <stdio.h>

int add(int, int); // プロトタイプ宣言

void main(void) {
    // add呼び出し
    int ans = add(2, 5);
    printf("add:%d\n", ans );
}

int add(int num1, int num2) {
    return num1 + num2;
}

/* 結果 */
コンパイルできる。


#ifndef SAMPLE_H
#define SAMPLE_H
 
int add(int num); //プロトタイプ宣言
 
#endif // HOGE_H__

#include <stdio.h>
#include "sample.h" // ヘッダファイルをicludeする

void main(void) {
    // add呼び出し
    int ans = add(2, 5);
    printf("add:%d\n", ans );
}

int add(int num1, int num2) {
    return num1 + num2;
}

/* 結果 */
コンパイルできる。

4-3. 引数なし関数には()内にvoidを記述する (重要度:★★★)

下記二つの関数ではコンパイル時の挙動が違います。

void func1() {} 
void func2(void) {} 

上記のfunc1()はエラーにならず、コンパイルが出来てしまいますが、
func2()はコンパイルエラーとなります。
挙動が変わってしまうのは以前のC言語が標準化される前の宣言方法が残されているためらしいです。

JPCERT/CCのWebページにも上記は記載されており、情報セキュリティインシデントにも繋がりかねないため、
引数なし関数にはしっかり「void」を記載する必要があります。

4-4. 文字列型(=String)が無い (重要度:★☆☆)

Javaではお馴染みのString型がC言語にはありません。
C言語では文字列を「1文字が連続したもの」として、char型の配列で文字列を扱います。

また、C言語では文字列をの終わりを「\0」で認識するため、配列を宣言する場合は「文字数+1」で宣言する必要があります。

str[] = "abcd"; // 初期値を設定する場合、要素数は設定しなくても大丈夫。
str[5] = "abcd"; // 'a', 'b', 'c', 'd', '\0'


5. 【最後に】今後もC言語を学び続ける必要がある

今回C言語について学んでみて、Javaとの違いについて知ることが出来ました。
また、C言語に触れて一番「?」となってしまった「ポインタ」について知識を深められる良い機会となりました。とはいえ、C言語についての理解はまだまだ浅いですし、何より経験が足りないので今後も学び続ける必要がありますね。。

この記事が少しでも私と同じC言語初学者の助けになれば幸いです。m(_ _)m
最後まで読んでいただきありがとうございました!!

\システム開発なら、株式会社シー・エス・エスへ/

6. 参考記事

C言語とは|特徴やC++やC#との違いを分かりやすく解説
一週間で身につくC言語の基本
【C言語入門】ポインタのわかりやすい使い方(配列、関数、構造体)
DCL20-C. 引数を受け付けない関数の場合も必ず void を指定する

7. この記事を書いた人


【ニックネーム】:ヤマ男
【経歴】:入社3年目。情報系の大学出身で主にJavaの現場に携わってきました。
【好きなもの】:家、ゲーム(FPS, FFシリーズ)、コーヒー☕(できれば甘いカフェラテ)

【Python】requestsライブラリを用いて外部のAPIを利用する方法

みなさん、こんにちは。株式会社シー・エス・エス、デジタル戦略開発課の本間です。

Pythonを触り始めてから3年ほどになりますが、今回初めて外部のAPIを呼び出す機会がありました。
最初は標準モジュールとして用意されているurllib.requestを使用しようと調査していましたが、その過程でrequestsライブラリの存在を知りました。
情報も多く使いやすそうだと感じ、実際に使用してみると楽にプログラミングをすることができました。

そこで今回は、Pythonとrequestsライブラリを用いて、独自に実装するAPIから外部で用意されている別のAPIを呼ぶ方法をまとめます。

1. 前提条件

1-1. 前提条件

python - 3.10.11
requests - 2.31.0

1-2. requestsのインストール

requestsは外部ライブラリですので使用するにはインストールが必要です。

# pip の場合
pip install requests

# pipenv の場合
pipenv install requests

2. requestsライブラリとは

2-1. requestsライブラリとはPythonの外部ライブラリのこと

requestsライブラリとはPythonの外部ライブラリで、HTTPリクエストを送信するためのものになります。
PythonにはHTTPライブラリの標準モジュールとしてurllib.requestがありますが、こちらよりも直感的かつ簡単にリクエストを送ることが可能になります。

2-2. requestsとurllib.requestの違い

requestsは標準モジュールのurllib.requestよりも簡単にリクエストを送れると記載しましたが、同じget処理だと下記のようになります。
 
requestsの例

    import requests

    headers = {"x-api-key": "使用するAPI_KEY"}
    # 送りたいクエリパラメータを辞書型で定義
    parameter = {
        "test": "test01"
    }
    response = requests.get("リクエストを送りたいAPIのURL", params=parameter, headers=headers)

urllib.requestの例

    import requests

    headers = {"Content-Type": "application/json", "x-api-key": "使用するAPI_KEY"}
    # 送りたいクエリパラメータを辞書型で定義
    parameter = {
        "test": "test01"
    }
    req = urllib.request.Request("リクエストを送りたいAPIのURL", json.dumps(parameter).encode(), headers)
    with urlopen(req) as res:
        response = res.read().decode()
        response = eval(response)

上記を比較してみると、requestsの方が直感的に実装できることが分かります。

3. requestsライブラリの使い方

3-1. get / post / delete をする方法

    import requests

    # 送りたいクエリパラメータを辞書型で定義
    parameter = {
        "test": "test01"
    }
    response = requests.get("リクエストを送りたいAPIのURL", params=parameter)
    return_data = {"status": response.status_code, "data": response.json()}

今はgetにリクエストを送るためrequests.getにしていますがpostならrequests.post、
deleteならrequests.deleteになります。
受け取った値.status_codeとすることでステータスコードを受け取ることが可能になります。
200(requests.codes.ok)の場合は成功ですし、それ以外の場合は失敗とすることができます。

    response = requests.get("リクエストを送りたいAPIのURL", params=parameter, headers=headers)
    if response.status_code == requests.codes.ok:
        print("成功")
    else:
        print("失敗")

3-2. 各種パラメータの指定方法

3-2-1. headers

APIキーでAPIに制限かけていることが多いと思います。
その場合はhedersに対象のAPIキーを設定させる必要があります。
他にもhedersにはContent-Typeなどの設定を行うことができます。

    import requests

    headers = {"x-api-key": "使用するAPIキー"}
    # 送りたいクエリパラメータを辞書型で定義
    parameter = {
        "test": "test01"
    }
    response = requests.get("リクエストを送りたいAPIのURL", params=parameter, headers=headers)

3-2-2. クエリパラメータ

getの場合にクエリパラメータを指定したい場合は、
3-1の例のように引数のparamsに送りたいパラメータを設定します。

    import requests

    # 送りたいクエリパラメータを辞書型で定義
    parameter = {
        "test": "test01"
    }
    response = requests.get("リクエストを送りたいAPIのURL", params=parameter)
    return_data = {"status": response.status_code, "data": response.json()}

3-2-3. パスパラメータ

パスパラメータを送りたい場合はAPIのURLの
パスパラメータの箇所に送りたい値を入れてあげればいいです。

    import requests

    # https://test01/ここにパスパラメータ/test02
    example_url = https://test01/value000/test02
    response = requests.get(example_url)
    return_data = {"status": response.status_code, "data": response.json()}

3-2-4. body

postやdeleteのようなbodyを送る必要がある場合はparamsではなく
jsonやdataに設定する必要があります。
どちらに設定するかはContent-Typeによって使い分けます。
・Content-Typeがapplication/jsonの場合

    import requests

    # 送りたいbodyを辞書型で定義
    parameter = {
        "test": "test01"
    }
    response = requests.post("リクエストを送りたいAPIのURL", json=parameter)
    response = requests.post("リクエストを送りたいAPIのURL", data=json.dumps(parameter))

・Content-Typeがapplication/json以外の場合

    response = requests.post("リクエストを送りたいAPIのURL", data=parameter)

3-3. すべてをまとめた例

getの場合

    import requests

    # 送りたいクエリパラメータを辞書型で定義
    parameter = {
        "test": "test01"
    }
    headers = {"x-api-key": "使用するAPIキー"}
    # https://test01/ここにパスパラメータ/test02
    example_url = https://test01/value000/test02
    response = requests.get(example_url, params=parameter, headers=headers)
    return_data = {"status": response.status_code, "data": response.json()}

post、deleteの場合

    import requests

    # 送りたいbodyを辞書型で定義
    parameter = {
        "test": "test01"
    }
    headers = {"x-api-key": "使用するAPIキー"}
    # https://test01/ここにパスパラメータ/test02
    example_url = https://test01/value000/test02
    # deleteの場合はpostがdeleteになる
    response = requests.post(example_url, json=parameter, headers=headers)
    return_data = {"status": response.status_code, "data": response.json()}

4. 【終わりに】呼び先のAPIでエラーが起きないよう注意が必要

requestsを使用して外部のAPIを利用しましたが、リクエストを送る際に
呼び先のAPIが受け取りたいパラメータを送らないとそもそも呼び先のAPIで
エラーが起きてしまうので注意が必要ですね。
最後までお読みいただきありがとうございました。

【関連記事】
▶プログラミング初心者がPythonを学んだ話

5. 参考文献

requests.readthedocs.io

この記事を書いた人


ニックネーム:本間
経歴:入社6年目です。最初の2年はRubyを用いたWebシステムの構築を行っていました。
そこからJavaやC++を用いたシステム構築を行い、その後現在に至るまでの3年ほどはPythonを用いたシステム構築を行っていました。
AWSではLambda、Glue jobでの開発を主に行っており、Pythonは主にその二つのリソースでの使用をしていました。
得意な言語:Python


事業会社の金融業務 ~異業種参入による金融業界の変革~

こんにちは。デジタル・マーケティング部の水信です。近年、例えば鉄道業のような事業会社が金融事業に進出するケースが出てきています。この動きは、従来の銀行や金融機関だけでなく、多くの異業種からの参入が目立つようになり、金融サービスの在り方が大きく変わろうとしています。これは、企業のビジネスモデルや競争戦略の多様化が進む中で、成長戦略の一環として捉えられています。

この記事では、事業会社がなぜ金融業務に参入するのか、その背景やメリット、課題、そして金融業界全体に与える影響について紹介します。

事業会社が金融業務に進出する背景

事業会社が金融サービスに参入する背景には、いくつかの要因が考えられます。

デジタル化の進展

金融業界は近年、デジタル技術の進展により大きく変革しています。特にフィンテック(Fintech)の台頭により、銀行業務や決済サービスがデジタルプラットフォームを中心に展開されるようになりました。これにより、金融業務はもはや従来の銀行の専売特許ではなくなり、技術を活用した異業種の参入が容易になりました。

例えば、従来は現金による取引が主流だった決済業務が、デジタルウォレットやQRコード決済など、非接触で迅速な手段に変わっています。こうした状況で、顧客基盤を持つ事業会社は、独自の金融サービスを提供することで新たな価値を生み出すチャンスを手に入れています。

顧客データの活用

多くの事業会社はすでに膨大な顧客データを持っています。例えば、Eコマース企業は、顧客の購買履歴や消費パターンなどのデータを収集しており、これを活用することで、金融サービスを提供する際に精度の高い審査や個別化したサービスを展開することが可能です。特に、与信判断やローン審査の際に顧客データを活用することで、従来の金融機関よりも迅速かつ柔軟なサービスが提供できる可能性があります。

また、事業会社が保有する顧客データを活用することで、より精緻な顧客体験を提供できることが魅力的です。これにより、顧客満足度の向上とともに、より強固な顧客関係が構築されます。

収益モデルの多様化

多くの事業会社が金融業務に参入する背景には、収益源の多様化があります。特に、Eコマースや小売業界では、利益率の低さが課題となることが多く、金融業務を取り込むことで収益性を向上させる狙いがあります。

たとえば、オンラインショッピングプラットフォームが、自社の顧客に対して分割払いのサービスや短期ローンを提供することで、手数料収入や金利収入を得ることが可能です。これにより、従来の販売活動に加えて新たな収益源を確保し、経営の安定化を図ることができます。

ブランド力と信頼性の活用

大手事業会社は、すでに強固なブランド力と顧客からの信頼を築いています。この信頼をもとに金融業務を展開することで、顧客は従来の金融機関に比べて親しみやすさや安心感を感じやすくなります。

特に、長年の取引や利用経験を通じて築かれた信頼関係は、金融サービスへの移行をスムーズにします。顧客は、自分が既に知っている企業から金融サービスを受けることに対して、心理的な抵抗感が少なく、利用率も高まる傾向があります。

金融サービスの多様化がもたらすメリット

事業会社が金融サービスを提供することには、いくつかの具体的なメリットがあります。

顧客体験の向上

事業会社が直接金融サービスを提供することで、シームレスな顧客体験が可能になります。例えば、小売業者が自社のオンラインプラットフォームで即時決済やローン申請を提供することで、顧客はワンストップで買い物から金融サービスまでを完結させることができます。

これは、顧客にとって非常に利便性が高く、企業にとっても他社との差別化要因となります。特に、顧客が煩雑な手続きを避けてスムーズに取引を進められることは、リピート率の向上にも寄与します。

顧客ロイヤルティの向上

金融サービスを提供することで、顧客との接点が増えるため、企業はより深い関係性を築くことができます。特に、ポイントプログラムやキャッシュバックキャンペーンなど、金融サービスを組み合わせたロイヤルティプログラムは、顧客の再利用を促進し、競合との差別化を図る手段として有効です。

例えば、Eコマースサイトでの購入時に、自社の金融サービスを利用することでポイントが多く付与される仕組みを導入することで、顧客はそのサイトでの購入を優先的に選ぶようになります。これにより、企業は顧客の囲い込みを実現し、長期的な収益増加が期待できます。

金融データを活用した事業拡大

金融サービスを通じて得られるデータは、企業のビジネス戦略に大きなインパクトを与えます。例えば、顧客の支払い能力や与信履歴などを把握することで、ターゲット層に合わせた新商品やサービスの開発が可能です。また、購買データや決済データを分析することで、消費者のニーズやトレンドを迅速に捉えることができ、競争力の強化につながります。

このように、事業会社が金融データを活用することで、単なる販売活動だけでなく、より高度なマーケティングやサービス開発を行うことができるようになります。

直面する課題とリスク

一方で、事業会社が金融業務を行う際には、いくつかの課題やリスクも存在します。

規制の複雑さ

金融業界は、規制が非常に厳しい業界です。事業会社が銀行業務を行う場合、金融庁などの監督機関からの認可が必要となり、厳しい審査が行われます。また、金融サービスを提供するにあたっては、個人情報保護や資金洗浄防止など、多くの法的義務が課せられます。これにより、事業会社は新たに金融サービスを展開する際、これらの法的リスクやコンプライアンスへの対応が重要な課題となります。特に、異業種からの参入であるため、金融業界特有のルールや規制に対する理解不足が問題となるケースもあります。

金融リテラシーの必要性

事業会社が金融サービスを提供するには、社内に高度な金融リテラシーが求められます。従来の事業とは異なる金融業務を扱うためには、専門的な知識やスキルが必要です。このため、金融業界に精通した人材の確保や育成が大きな課題となります。

また、金融業務にはリスク管理が不可欠です。例えば、貸し倒れリスクや市場変動による影響を適切に予測・管理するためには、高度なリスクマネジメント体制が求められます。事業会社がこれらのリスクに適切に対処できない場合、経営に重大な影響を及ぼす可能性があります。

金融業界への影響と今後の展望

事業会社が金融業界に参入することで、従来の金融機関にとっては新たな競争相手が出現したことになります。これは、金融業界にとって競争環境の激化を意味しますが、一方で、革新的なサービスや技術の導入が進むことで、業界全体の発展を促す可能性も秘めています。

例えば、フィンテック企業や異業種からの参入によって、より顧客に寄り添ったサービスが提供され、従来の銀行もサービスの改善を余儀なくされるでしょう。特に、デジタル技術の進展により、迅速かつ柔軟な金融サービスが求められる中で、金融業界全体の競争力向上が期待されます。

また、異業種からの参入が進むことで、金融業務のあり方が多様化し、顧客にとっては選択肢が増えるメリットもあります。これにより、金融サービスがより身近で使いやすいものとなり、最終的には消費者にとっての利便性が向上することが予想されます。

まとめ

事業会社が金融業務に参入する動きは、単なるトレンドにとどまらず、今後の金融業界の在り方を大きく変える可能性を秘めています。デジタル技術の進展や顧客データの活用、そして顧客ロイヤルティの向上など、事業会社ならではの強みを活かすことで、従来の銀行にはないサービスが提供されることが期待されます。

一方で、規制対応や金融リテラシーの必要性など、解決すべき課題も多く存在します。これらの課題を克服しながら、事業会社が金融業務を成功させるためには、専門的な知識やスキルの獲得が不可欠です。

今後も、この動きが金融業界全体にどのような影響を与えるのか、そして新たなビジネスモデルがどのように展開されるのか、注目していく必要があります。事業会社による金融サービスの提供は、業界全体の活性化を促進し、より豊かな消費者体験を実現するための重要な鍵となるでしょう。

 

▷当社金融ソリューションの特長はこちら
https://www.css-net.co.jp/service/solution_financial/ 

この記事の担当

デジタル・マーケティング部  水信 安弘

好きなもの:炭酸飲料

ルーティーン:朝食は卵でタンパク質の摂取を心がけています。

一言:私はノーネクタイにすっかり慣れてしまいましたが、外でネクタイ姿を見かけると格好が良いと思うことがありますね。