プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2017/12/28

[C#] GitLab CI と SonarQube で .NET アプリケーションの CI を行う

2017/12/27

.NET Core の ProjectGUID

2017/12/24

IIS に AdminScripts フォルダがないのでインストールする方法

event_note

2017/12/23

IIS をコマンドで操作する

event_note

2017/12/22

Windows 7 に OpenSSH をインストールする

event_note

2017/12/20

.gitlab-ci.yml で変数を使う(ただし Windows 環境で)

event_note

[C#] SonarQube で .NET アプリケーションのコード解析を行う

2017/12/19

GitPitch を docker-compose で動かしてみる

event_note

2017/12/18

GitLab Runner を Windows で動かす

event_note

2017/12/14

ASP.NET Core で DataAnnotations の多言語対応を行う

event_note

2017/12/13

多言語対応のための共通のリソースファイルの作成

event_note

2017/12/08

[C#] AppVeyor と Codecov でカバレッジを計測する

2017/12/06

SonarQube を docker-compose で動かしてみる

event_note

2017/12/05

[C#] OpenCover でコードカバレッジを計測する

2017/11/30

Visual Studio のビルド後イベントで配布用の ZIP ファイルを自動生成する

2017/11/29

.NET アプリケーションを XCOPY 配置で配布する

2017/11/25

ファイル選択ダイアログとフォルダ選択ダイアログ

2017/11/23

GitHub と AppVeyor で .NET アプリケーションの継続的インテグレーションを行う

2017/11/22

C# におけるコマンドライン引数の解析

2017/11/17

Visual Studio で .NET Core + Electron.NET を使う

2017/11/16

Firefox 57 用にアドオンのインストールと設定変更を行う

event_note

2017/11/15

Node.js のインストールとプロキシの設定

2017/11/14

GitLab CI で .NET Core の継続的インテグレーションを行う

event_note

2017/11/13

GitLab をアップグレードしたら Redmine へのリンクが解除された

event_note

2017/11/12

GitHub と Travis CI で .NET Core の継続的インテグレーションを行う

2017/11/11

GitLab で LDAP 認証するとメールアドレスが勝手に設定されるのを直す

event_note

2017/11/10

GitLab のバージョンアップを行った

event_note

2017/11/09

GitLab のバックアップとリストア

event_note

2017/11/08

Visual Studio 2017 Update 4 (15.4) で .NET Core プロジェクトの新規作成ができない

event_note

2017/11/07

ASP.NET Core におけるバリデーションの基本

event_note

2017/11/05

[C#] 非同期メソッドを同期メソッドとして扱いたい場合

event_note

2017/11/03

ASP.NET Core における css と js ファイルの Bundle と Minify

event_note

2017/11/02

ASP.NET Core アプリケーションを外部に公開するための Windows ファイアウォールの設定

event_note

2017/11/01

ASP.NET Core アプリケーションを IIS でホストする

2017/10/31

Redmine のチケットの進捗率をステータスに連動にすると、親チケットの進捗率は子チケットから算出されなくなる

event_note

2017/10/30

ASP.NET Core で作成したサイトを IE11 で表示したときに表示がおかしい

event_note

2017/10/28

Blogger API のリクエスト制限

event_note

2017/10/27

GitLab Runner を GitLab に登録

event_note

2017/10/25

GitLab を PlantUML に対応させる

event_note

2017/10/24

TestLink で LDAP 認証を行う

event_note

2017/10/23

TestLink を docker-compose で動かしてみる

event_note

2017/10/19

Redmine のチケットのインポートに関するメモ

event_note

2017/10/17

Docker である日突然 pull できなくなった

event_note

2017/10/13

Redmine を docker-compose で動かしてみる

event_note

2017/10/12

C# で Ascii コードの変換

event_note

2017/10/11

Windows 10 にて Bluetooth のマウスが効かなくなった

event_note

2017/10/10

ASP.NET Core で設定ファイル(appsettings.json)から設定を取得する

event_note

2017/10/06

smbclient で Linux から Windows にデータをコピーする

event_note

2017/10/05

Docker for Windows の設定

event_note

2017/10/04

TortoiseGit でコミットメッセージを変更する

event_note

2017/10/02

smbclient で session setup failed: NT_STATUS_LOGON_FAILURE が表示される

event_note

2017/09/29

GitLab Runner を docker-compose で動かす

event_note

2017/09/26

PlantUML サーバーを docker-compose で動かす

event_note

2017/09/25

Windows 10 の便利なショートカットキー

event_note

2017/09/23

ASP.NET Core Identity を使わない認証

event_note

2017/09/22

Docker for Windows のインストール

event_note

2017/09/21

Surface Pro (2017) の Mini DisplayPort から音が出なくなった

event_note

2017/09/20

.NET Core コンソールアプリケーションにおけるロギングや設定について

event_note

2017/09/18

Blogger API を使用するための準備

event_note

2017/09/17

Vaster2 の適用とカスタマイズ

event_note

2017/09/15

ASP.NET Core における多言語対応

event_note

2017/09/13

Log4View で NLog のログを閲覧する

event_note

2017/09/12

Doxygen を使ってソースコードからドキュメントを作成する

event_note

2017/09/10

.NET Core SDK 2.0 のインストール

event_note

2017/09/09

SQL Server 2016 Express の暗号化

event_note

2017/09/08

SQL Server にテーブルを作成する

2017/09/07

SQL Server にデータベースを新規作成する

2017/09/06

SQL Server 2016 Express のインストール

event_note

2017/09/04

プログラミング・IT技術関連書フェアが Amazon で開催中

event_note

2017/09/01

Visual Studio と Visual Studio Installer が起動しなくなった

event_note

2017/08/31

SQL Server 2016 のインストールで「問題が発生しました」のエラーが発生した

event_note

2017/08/30

「ビルトイン Administrator アカウントを使って、Microsoft Edgeを開けません」の対処方法

event_note

2017/08/25

Windows 10 で画面の解像度が最適にならない

event_note

2017/08/18

インデントはタブかスペースか?

event_note

2017/08/17

async/await の動きを簡単なコードで確認してみる

event_note

2017/08/12

OneDrive とローカルのドキュメントと画像とのリンクを解除する

event_note

2017/08/11

Dictionary の Value 値によって要素を削除する方法

event_note

2017/08/10

ownCloud で LDAP 認証を行う

event_note

2017/08/08

ownCloud を docker-compose で動かしてみる

event_note

2017/08/02

Vaster2 で人気記事のタイトルで hover が効かない不具合を修正

event_note

2017/07/31

Vaster2 のブログアーカイブのバグを修正する

event_note

2017/07/29

Blogger で highlight.js を使用する

event_note

2017/07/27

MSTest と Moq を使用した単体テスト

event_note

2017/07/16

Amazon Product Advertising API で 400 エラーが返ってくるようになった

event_note

2017/07/14

個人的に使用しているライブラリ等のライセンスまとめ

event_note

2017/07/12

Bootstrap で data-parent が効かない

event_note

2017/07/04

AsciiDoc を Visual Studio Code でプレビューする

2017/07/03

Asciidoctor のインストール

event_note

2017/06/17

Markdown で Blogger の記事を書く

event_note

2017/06/06

remark.js で作成したスライドが Internet Explorer で表示されない

event_note

簡単なプレゼンとかで使用する資料を remark.js を使用して Markdown で作成しているのですが、IE のみスライドが表示されず、ずっと Chrome や Firefox で閲覧してくださいと言ってきました。

しかし、ヘッダーに以下の一行を追加することで IE でも正しく表示されるようになりました。
もっと早く気づくべきだった・・・orz

<meta http-equiv="X-UA-Compatible" content="IE=8;IE=9;IE=10;IE=11;edge;">

2017/06/04

Amazon Product Advertising API を利用するために IAM ユーザーでアクセスキーを発行する

event_note

Amazon の広告情報などを取得する Amazon Product Advertising APIを利用するためには、AWS (Amazon Web Services) からアクセスキーを発行する必要があります。
AWS にログインすると、ルートアカウントに対してアクセスキーを発行するのは非推奨で、IAM ユーザーを作成し、個別の IAM ユーザーに対して適切な権限を与えるように言われます。

これについて、少し前までは IAM ユーザーに対して Product Advertising API の権限を付与することができなかったみたいで、ネット上を検索してみても Product Advertising API のアクセスキーはルートアカウントでしか発行できないという記事がたくさん見つかります。
しかし現在では IAM ユーザーに対して Product Advertising API に対する権限を付与できますので、まずは Amazon に言われる通りに IAM ユーザーに対して権限を付与するようにしましょう。

ただし、現時点では Amazon Product Advertising API を利用するには、AdministratorAccessの権限が必要のようです。
これだとせっかく IAM ユーザーを作成してもフルアクセスできてしまうのであまり意味がありません。
IAM ユーザーに Amazon Product Advertising API だけを利用できるようにするには独自にポリシーを作成する必要があるみたいです。

この件について、下記の参考 URL として挙げているサイトの内容がとても参考になりました。
AWS 初心者の私も危うくルート権限を付与するところでした。
日進月歩の IT の世界ではググる際に期間を指定するというのも重要なテクニックですね。

尚、取得したアクセスキーはコード上に直接記述せず、環境変数を使うなどするのが普通のようです。
アクセスキーをハードコーディングしたソースコードを Github などのパブリックなリポジトリに公開してしまい、不正利用された結果 Amazon から莫大な費用を請求されたというのはよく聞く話です。
そうなってしまった場合でも初回は何とか支払いを免除されたケースもあるらしいですが、絶対とは限らないので、自分の身は自分で守る必要があります。

参考URL

2017/05/29

VSCode で Running the contributed command:'markdown.showPreviewToSide' failed. というエラーが表示される

event_note

Visual Studio Code を使用して Markdown でドキュメントを作成していたのですが、プレビューしようとすると、以下のエラーメッセージが表示されました。
Visual Studio Code のバージョンは 1.12.2 です。

Running the contributed command:'markdown.showPreviewToSide' failed.

どうやらネットワーク上にあるファイルを編集しているのが原因のようです。
ファイルをローカルにコピーするとプレビューできました。
以前のバージョンではネットワーク上にあるファイルもプレビューできていたのですが、変更されたみたいですね。

参考URL

2017/05/23

Xamarin でテンプレートをビルドしてみる

event_note

私は Android 用のアプリも iOS 用のアプリも作成したことはありませんが、Xamarin を使えば C# でもモバイルアプリが作成できると知り興味があったので試してみました。
とりあえず作成したかったのは Android 用のアプリです。

環境

Visual Studio 2017 Community

プロジェクトの作成

[ファイル] > [新規作成] > [プロジェクト] より新しいプロジェクトを作成します。

[インストール済み] > [テンプレート] > [Visual C#] > [Cross-Platform] > [クロスプラットフォームアプリ (Xamarin.Forms またはネイティブ)] を選択します。

以下のような「テンプレートの選択」という画面が出てきました。

UI テクノロジですが、Xamarin.Forms はクロスプラットフォームにUIを定義し、ネイティブはプラットフォームごとに UI を定義するらしいです。
他の項目はよくわかりません。とりあえず全てデフォルトのままで OK を押しました。

続いて以下の画面が表示されますが、こちらも全てデフォルトのままにしました。

以上で Xamarin のプロジェクトが作成されると思います。
この状態でビルドしてデバッグを開始すると、以下の画面が表示されました。

iPhone は持っていないのでとりあえずスルーしました。

しばらく待つと Android のエミュレーターが起動し、その中でアプリケーションが起動します。
しかしめちゃくちゃ重く、まともに使用できないなと思いました。
デバッグを行う際、以下のような画面が表示されたので、軽量なエミュレーターを使用するば改善されるかもしれません。

参考URL

2017/05/16

ASP.NET Core でテンプレートサイトを表示するまで

event_note

私は ASP.NET も .NET Core も触ったことありませんが、興味があったので試してみました。

環境

  • Visual Studio 2017 Community

プロジェクトの作成

[ファイル] > [新規作成] > [プロジェクト] より新しいプロジェクトを作成します。

[インストール済み] > [テンプレート] > [Visual C#] > [Web] > [ASP.NET Core Web アプリケーション (.NET Core)] を選択します。

[Web アプリケーション] を選択します。

これでプロジェクトが作成されました。
とりあえずこの段階で F5 を押してビルドしてみます。
すると、ブラウザに以下の画面が表示されると思います。

仕組み

上述した通り、私は ASP.NET も .NET Core も初めてのため、この画面がどういう仕組みで動作しているのかさっぱりわかりませんでした。
なので、少し調べてみた結果を書いてみます。

https://codezine.jp/article/detail/9778
まずプログラムのエントリーポイントとなる Main メソッドは Program.cs にあります。
そこを見てみると以下のようなコードになっています。

public class Program
{
    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup&rt;()
            .UseApplicationInsights()
            .Build();

        host.Run();
    }
}

ASP.NET Core ではクロスプラットフォーム対応のためアプリケーション内部に Kestrel という Web サーバーを内包しており、それを起動しているそうです。
しかし、実際には Kestrel 単体では動作させず、 Windows では IIS を、Linux などでは Apache や Nginx などをリバースプロキシサーバーとして使用し、それらを経由して Kestrel にアクセスするようにするみたいです。
上記のデバッグ画面表示時も IIS Express 経由で表示されているみたいです。

さて、上記のコードに .UseStartup<Startup>() という記述があり、これが最初に表示するページを指定しているのだそうです。
ここでは Starup というクラスが指定されており、その実体は Startup.cs というファイルに記述されています。
中身については以下のサイトの解説がわかりやすかったです。
http://blog.shibayan.jp/entry/20160517/1463468762

参考URL

2017/05/11

Windows のプロキシ設定を PowerShellで設定する

event_note

2017/05/10

Task と async/await についての参考サイト

event_note

2017/05/09

Mahapps.Metro のメッセージダイアログに Yes/No ボタンを表示する

event_note

2017/04/27

C#で絶対パスから相対パスを取得する

event_note

2017/04/23

Windows 10 に .NET Framework 2.0 をインストールする

event_note

NLog で出力したログを見るために Log2Console をインストールしようとしたのですが、.NET Framework 2.0 が必要のようでした。

2017/04/22

NuGet による拡張機能のインストール

event_note

Visual Studio のパッケージマネージャー NuGet を使って、Visual Studio に拡張機能をインストールする方法です。

GUI でのインストール方法

[ツール] > [NuGetパッケージマネージャ] > [パッケージマネージャコンソール] を選択します。

CUI でのインストール方法

パッケージの名前が分かっている場合は、パッケージ マネージャー コンソール でコマンドを打ったほうが早いかもしれません。
「パッケージ マネージャー コンソール」は以下から開くことができます。

[ツール] > [NuGet パッケージ マネージャー] > [パッケージ マネージャー コンソール]

パッケージをインストールするには以下のコマンドを入力します。

PM> Install-Package パッケージ名

2017/04/11

AsciidocFX をビルドする

event_note

2017/04/10

TortoiseSVN ロック状態のチェック

event_note

ロックされているファイルはないか、誰がファイルをロックしているのかを調べる方法です。

  1. 作業ディレクトリで右クリックし、「TortoiseSVN」→「変更をチェック」を選択します。
  2. 「リポジトリをチェック」を選択します。
  3. ロックしている人がいたら表示されます。

2017/03/27

Visual Studio で文字がにじむ(ぼやける)

event_note

Visual Studio 2015 でプログラミングをしていると、どうも文字がにじんで見えるというかぼやけて見えるところがありました。
原因はすごく単純なことで、ソースコードの表示の倍率が中途半端な値になっていることでした。
ソースコード表示画面の左下のほうに倍率の設定がありますが、ここが私の場合 99% になっていました。

2017/03/04

Windows の不要なサービスやスタートアップを無効にして高速化

event_note

会社の PC が重すぎて仕事にならないので、頑張って不要なサービスやスタートアップを無効にして高速化を図りました。
環境は Windows 7 です。
内容の保証はできませんので自己責任でお願い致します。

Adobe Acrobat Update Service

Adobe Reader などの自動アップデートの監視などでされてると推測しますが、不要なので無効にしました。

Microsoft IME Dictionary Update

日本語の入力環境には Google 日本語入力を使用しているので、無効にしました。

NT Meter

NEC 製の PC に入っているサービスで、PC が故障した時にメーカーが見るログを記録しているようです。
無効にしました。

Shell Hardware Detection

CD や DVD などの自動再生に関連するようですが、必要ないので無効にしました。

TEPRA Driver Option UI Manager

テプラを PC に繋いで使用したときにインストールしたのだと思われますが、滅多に使わないので無効にしました。

UMVPFSrv

Logicool のマウスやキーボードに関するサービスのようです。
以前 Logicool の Web カメラを接続したことがあったので有効になっているのだと思いますが、現在は使用していないので無効にしました。

Windows Image Acquisition (WIA)

デジタルカメラやイメージスキャナなどのイメージング・デバイスを接続するときに必要となるようですが、そういったデバイスは使用しないので無効にしました。

Windows Live ID Sign-in Assistant

Windows Live Messenger や Skydrive などを使用する際に必要なサービスだそうですが、会社の PC では使用しないので無効にしました。

Windows Phone IP over USB Transport (IpOverUsbSvc)

Windows Phone デバイスでアプリをテストする際などに必要となるようです。
Windows Phone SDK インストールすると、このサービスもインストールされるようですが、Windows Phone の開発などは行っていないので無効にしました。

2017/02/22

.git/index.lock があるよと言われたら

event_note

Git で pull や checkout を行おうとした際、以下のメッセージが表示されて実行できなかったことがありました。

fatal: Unable to create '/hoge/.git/index.lock': File exists.

If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.

.git の中に index.lock があるので処理できないと言われています。
なので、とりあえずこれを手動で削除すれば実行できるようになるはずです。

しかし、私の場合、この現象が pull を途中で終了したことで起きるようになったせいか、中途半端にゴミのファイルが残ってしまい、いくるかのファイルの上書きができなくなって pull も checkout もできないままだったので、結局 clone し直しました。

2017/02/21

プロジェクトはこのソリューション構成に対してビルドするように選択されていません。

event_note

Visual Studio 2015 で WPF のアプリケーションを開発していると、以下のメッセージが表示されてビルドがスキップされてしまうことがありました。

「プロジェクトはこのソリューション構成に対してビルドするように選択されていません。」

解決方法

メニューバーから [ビルド] > [構成マネージャー] を選択します。
すると構成マネージャーの画面が表示されるので、該当のプロジェクトの「ビルド」にチェックを入れるとビルドできるようになります。

2017/02/18

MSTest の導入

event_note

「テストコードのないコードはレガシーコードだ」というのはよく聞く話ですが、恥ずかしながら私もずっとテストコードを書く文化のない環境で働いてきたため、テストコードというものを書いたことがありません。

さすがにこのままではまずいと思い、C# で書いたコードでは MSTest でユニットテストを行う癖をつけたいと思いました。
というわけで、MSTest の導入方法です。
本当に最初の最初の導入方法について書いただけですが・・・。

テストプロジェクトの作成

まずはソリューション内にテストを行うためのプロジェクトを作成するようです。
MSDN よれば、1つのプロジェクトに対して1つのテストプロジェクトを作成するのが基本のようですね。
ソリューション内にプロジェクトが2つあれば、それぞれに対応するテストプロジェクトを作成(テストプロジェクトを2つ作成)するということですね。

テストプロジェクトの作成方法には2つの方法があるようです。

  • 手動で新規にテストプロジェクトを作成する
  • メソッドからテストプロジェクトを作成する

前者の「手動で新規にテストプロジェクトを作成する」方法は、

  1. チームエクスプローラーでソリューションを右クリック
  2. [追加] > [新しいプロジェクト] を選択
  3. サイドバーで [Visual C#] > [テスト] を選択
  4. [単体テストプロジェクト] を選択

で、作成できます。
ただ、後者のメソッドから作成する方法のほうが楽なんじゃないかと思いました。

「メソッドからテストプロジェクトを作成する」方法は、

  • テストしたいメソッド名の上で右クリック > [単体テストの作成] を選択

とするだけです。
すると以下のような画面が表示されます。

テストフレームワークは MSTest を選択します。
テストプロジェクトは「新しいテストプロジェクトを」を選択します。
既にテストプロジェクトを作成していればそのプロジェクトを選択することもできます。
とりあえずこれで作成してみます(他の項目は追々勉強していきます)。
するとテストプロジェクトとテストメソッドが作成されます。

一応注意点として、テストを作成するためにはクラスとメソッドが public でなければなりません。
(private なメソッドをテストする方法もあるみたいですが・・・。)

で、作成されたコードを見ればわかりますが、

  • テストプロジェクトの名前は「テストするプロジェクトの名前 + Tests」
  • テストプロジェクトの名前空間は「テストするプロジェクトの名前.Tests」
  • テストクラスの名前は「テストするクラスの名前 + Tests」
  • テストメソッドの名前は「テストするメソッドの名前 + Test」

になるようですね。
MSDN でもこの標準の名前付け規則を採用することをお勧めするとあります。

テストの実行方法

メニュバーから [テスト] を選択 > [実行] > [すべてのテスト]
で、とりあえずテストが実行でき、テスト結果がテストエクスプローラーに表示されます。

また、エディタ内で右クリック > [テストの実行] でもテストが行えます。
このとき、右クリックした位置で以下のように変わるようです。

  • クラス内で右クリック > [テストの実行]:クラス内のすべてのテストメソッドを実行
  • テストメソッド内で右クリック > [テストの実行]:そのテストメソッドのみを実行

テストコードの書き方はまた追々書きます。

参考URL

2017/02/16

NLog のインストール

event_note

2017/02/15

HtmlAgilityPack のインストール

event_note

2017/02/14

LibGit2Sharp のインストール

event_note

2017/02/13

MahApps.Metro のインストールと基本設定

event_note

2017/02/06

VSCode を 1.9 にバージョンアップすると拡張機能が動作しなくなった

event_note

Visual Studio Code の 1.9 の更新案内が来ていたのでアップデートしたら、拡張機能が全て動作しなくなりました。
拡張機能の再インストールなども試してみましたが直らず。
Visual Studio Code 自体を一度アンインストールして 1.8.1 を再インストールすれば多分直ると思うのですが、面倒です。
PlantUML やら reStructuredText のライブプレビューの拡張機能とかは動かないとかなり困るのですが、Github の Issue を確認すると報告が上がっていたので、とりあえず待つしかないですね。

2017/01/27

ネットワーク上にあるバッチファイルが実行できないとき

event_note

2017/01/24

TortoiseGit でブランチ間の差分を見る

event_note

2017/01/18

マージ元ブランチとマージ先ブランチ

event_note

Git を使用しているとどっちがどっちだかわからなくなるのでメモしておきます。

日本語英語説明
マージ元ブランチSource Branchマージするブランチ
git merge で指定するブランチ
マージ先ブランチTarget Branchマージされるブランチ
現在チェックアウトしているブランチ

つまり、

  • Source BranchTarget Branch にマージする
  • Target BranchSource Branch をマージする

ということなんですが、これでも覚えにくいなぁと思うのは私だけでしょうか。

2017/01/16

[C#] 列挙型を文字列へ変換

event_note
enum Hoge
{
    Off,
    On,
}

enum Piyo
{
    Off = '0',
    On = '1',
}

Hoge hoge = Hoge.On;
Piyo piyo = Piyo.On;

string foo = hoge.ToString();
string bar = piyo.ToString();

// 上記はどちらも "Off" という文字列になる

string foo = ((int)hoge).ToString();
string bar = ((char)piyo).ToString();

// 上記はどちらも "1" という文字列になる

2017/01/13

[C#] クラスの分割

event_note

クラスを分割するには partial キーワードを class の前につけます。
尚、継承や修飾子などはどれか1つのクラスに書いておくだけでよいみたいです。

public sealed partial class Hoge : BaseClass
{
 ...
}
partial class Hoge
{
 ...
}