技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

2021-01-01から1年間の記事一覧

EclipseのGradleプロジェクトに赤いビックリマーク(!)が出た時の対処

Eclipseからbuild.gradleを編集(1行スペースを入れる→そのスペースを削除)し保存してみて下さい。 なぜ赤いビックリマークが出るのかと言うと、何かしらの原因で設定したクラスパスが失われたからです。クラスパスはGradleにより設定されるので、Gradleで…

役職に応じた役割の違いと、それを意識した行動

通常の会社では、大まかに言って役職が「経営者」「管理者」「担当者」と分かれています。先に挙げた方が、責任が重い上位の役割であるとみなされます。そして、組織は通常ピラミッド式になっており、上位者は見る範囲が広く人数が少ない、下位者は見る範囲…

類似バグを効率的に見つけ出すための観点

品質を上げる上では、レビューやテストにてあるプログラムのバグを1つ見つけた場合、「他にも同じようなバグが潜んでいないか」という視点で追加でレビューやテストを入れるのが定石です。類似バグが発生しやすいポイントを押さえて追加レビュー・追加テス…

情報処理技術者試験対策:DevOps

「DevOps」とは、「開発部門と運用部門の連携を密にすることで、新機能や機能改修等のリリースの速度を上げること」を指します。そして、連携を密にする具体的な方法として、自動化ツールが用いられます。 ---- 一般的に、開発部門と運用部門の役割を時系列…

事例から見るシステム利用者に向けた理想的な障害報告

少し古い事例ですが、2020年10月01日の東証ArrowHead障害の会見から、システム利用者に向けた理想的な障害報告を見て行きたいと思います。https://www.youtube.com/watch?v=Sokp32qOvyE この会見は、障害報告のお手本と言える会見だと思います。 ビジネスを…

JSONを整形するNode.jsのサンプルコード

JSONフォーマットはプログラムで読み込むことができるデータ構造であり、人間が読むのにも適しています。しかし、人間が読む場合、適切にインデントが入っていないと読みにくいです。 そこで、JSONフォーマットを整形するサンプルコードを紹介します。このサ…

プログラミング言語のスキルチェンジで役に立った共通スキル

私は元々COBOLやC言語を主に扱っていたエンジニアでしたが、3年前からJavaやC#を中心的に扱う現場で仕事をするようになり、現在ではJavaScriptを使うフロントエンド業務に従事するようになりました。プログラミング言語に依らない共通のスキルを有していた…

本番障害発生時に元請けSIerで発生する作業とその影響

社会インフラを支えるシステム、例えば金融システムや公共システムについては、高い信頼性が求められます。このようなシステムの本番運用で障害が発生した場合、その結果は重大なものになります。一般的なイメージとして、その「重大なもの」として、以下の…

動的SQLとは?

SQL

「動的SQL」とは、入力値に従ってプログラムにより柔軟にSQL文を生成することを指します。条件が外から与えられる場合に便利です。 例えば、以下のようなユーザーマスターテーブルがあるとします。 create table user_master(user_id CHAR(4) NOT NULL,user_…

データレコードの種類を増やして拡張性を持たせる

企業間でやりとりするファイルでよく見かけるフォーマットとして、レコードが「ヘッダレコード」「データレコード」「トレーラレコード」に分かれているフォーマットがあります。簡単に言うと、それぞれのレコードの説明は以下のようになります。 【それぞれ…

SpringFramework:「application.properties」の定義を漏らすことで発生するバグ

SpringFrameworkで、JavaやHTMLのコードを読んでも原因がわからないバグは、「application.properties」の定義漏れで引き起こされることがあります。 例えば、「spring.messages.basename」の定義が漏れていると、「messages.properties」のようなファイルに…

ハッシュ化(暗号化)におけるソルトとは

この記事では、ハッシュ化で使われる「ソルト」について、説明していきます。どちらかと言うと初心者向けです。 ---- 【ハッシュ化とは】ハッシュ化とは、与えられた文字列を特定の方式(アルゴリズム)に従って変換することです。変換後の文字列から変換前…

JavaScript:未宣言・var・letの変数の挙動の違い

JavaScriptにおける変数の宣言方法は、constを除くと以下の4つがあります。 ・未宣言 var1 = "var1"; のように、値が代入された時点で変数が宣言されたものとみなされる。 ・var var var1; のように、var句により変数を宣言する。 ・var(巻き上げ) var1 =…

java:読み込んだ文字列を後ろから解釈する

ファイルから読み込んだ文字は前から解釈することが多いですが、ある程度のまとまり(例えば1行)を読みこんでから後ろから解釈した方が楽な場合があります。例えば、項目数が可変の場合に後ろの項目を取得するような場合に楽に処理できます。 今回は、以下…

情報処理技術者試験対策「非機能要件」

経験が浅い技術者は、システムを構築する際、ユーザーの目から見える機能(機能要件)を満たすことのみを考えがちです。しかし、システムが価値を生み出すためには、システムが安定的に運用される必要があります。システムの安定運用を実現するための要件を…

java:ファイルを1バイトずつ読み込んで解釈する例

ファイルを1バイト/1文字ずつ読み書きすることでファイルの中身を解釈しながら処理することができる、というのは以前の記事で書いた通りです。今回の記事では、複雑なフォーマットのファイルを例に出して説明したいと思います。 ---- 今回の例では、以下…

システムの概要を示す設計書が本当に必要な設計書である

表題の通りですが、システム開発で本当に必要な設計書は、システムの概要を示す設計書です。そのような設計書があれば、実装を知らない立場の人(例えば要件定義担当や上位の設計者)との意思疎通がスムーズになりますし、開発者を新たに向かい入れる時にも…

java:ファイルを1バイトずつ/1文字ずつ読み書きする

ファイルの中身を前から順番に解釈しながら読み込む場合、ファイルを1バイトずつ/1文字ずつ読み込むと処理がしやすいです。ここでは、読み込みと書み込みのjavaのサンプルコードを示します。 1バイトずつ読み込んだ方が汎用性は高いのですが、1バイトず…

Webデザインの超概要

Webデザインを学習するにあたり全体像を見渡す記事が必要と感じたので、作成しました。 1.近年のWebページの傾向エンドユーザーの目に触れる部分について、HTMLの機能をそのまま使ったシンプルなページは少なくなり、ボタンやラベル等の見た目を装飾したペ…

プログラム上の変数やロジックの意味を現実のビジネスルールと合わせることの重要性

通常、初回リリースの時点では、ソースコードは現実のビジネスルールを反映したものになっています。(なっているべきです) 障害対応や保守開発でソースコードを修正する際は、将来の保守性を犠牲にしないために、ビジネスルールに沿った修正を行うべきです…

SQL:where 1 = 1の使い所

SQL

SQL文の条件指定で"where 1 = 1"を指定した場合、この条件は必ず真になり、全てのカラムが条件を満たすようになります。これはSQLインジェクションで用いられることで有名ですが、プログラムでSQL文を生成する時に"where 1 = 1"を利用すると便利なことがあり…

HTMLのclassを複数指定する

小ネタですが、HTMLのclassはスペース区切りで複数指定できます。cssで細かく部品化している場合に、複数指定すると便利です。以下、サンプルです。 【サンプルコード】・sample.html<html lang="ja"><head> <meta charset="UTF-8"> <title>sample</title> <style> .add-border { border: 3px solid #000; } .add-color { backgr</style></meta></head></html>…

JavaScript:オブジェクト型の定数値にはObject.freeze()を使う

プリミティブ型(Number型やString型等)の変数は、constで定義することで変更不可にできます。これを利用して、定数値を定義することができます。 【サンプルコード】const hoge = 1;hoge = 2;console.log(hoge); 【ChromeのデベロッパーツールのConsoleで…

Vue.js:componentでpropsを使って属性を受け取る

Vue.jsでは、componentを使用して独自タグを定義することができます。これは部品化に役立ちます。 独自タグではslotタグにより値を受け取ることができますが、propsプロパティを用いて属性値を受け取ることもできます。属性値はテンプレート構文で使用できる…

Chromeでharファイルを出力する手順

ChromeのデベロッパーツールのNetworkタブでは、アクセスしたページとやりとりされたリクエストやレスポンスについて、その内容や所要時間を確認することができます。そして、Networkタブで確認した内容は、harファイルと呼ばれるファイルに出力し、保存する…

ChromeからJavaScriptを実行する

Chromeのデベロッパーツールの機能の一つであるConsoleでは、任意のJavaScriptを実行することができます。コマンドプロンプトでDOSコマンドを実行するような感覚でJavaScriptを実行することができるので、JavaScriptの仕様のちょっとした確認を行いたい場合…

ソースコード中に顧客情報を記述してはいけない

特定の顧客用に特別なビジネスロジックを用意している場合、以下のようにソースコード中に顧客情報を記述することで実装することはできます。(顧客番号が'1111111'である場合に特別なビジネスロジックを実行するとします) :::if (処理中の顧客番号が'11…

java:ソートキーが複数存在する場合、一時的なフォーマット変更ではなく独自Comparatorで対応するべき

複数のソートキーが存在するオブジェクトの配列について、固定長のフォーマットに直すことでソートキーを1つにできます。しかし、フォーマットを直して1つのキーでソートできるようにするよりも、独自Comparatorを定義して複数のキーでソートした方が高速…

Visual Studio Codeでdraw.ioを使う

フローチャートやネットワーク図等は、フリーの作図ツール「draw.io」を使うと楽に記述できます。Excelでも記述はできますが、draw.ioでは各々の図の記述に適した素材が提供されているという特徴があります。また、draw.ioはブラウザ上での使用が想定されて…

システム改修で発生するデータ移行とは

通常のシステムでは、データベースやファイル等にデータを蓄積します。そして、システムの改修の際に、そのデータのフォーマットを変更することがあります。 データのフォーマットの変更には、「これまでに蓄積されたデータをどのように扱うのか」という問題…