株式会社シベスピ 従業員ブログ

シベスピの社員ブログ。技術・想い・経験沢山書いていきます!

【C#】Visual StudioなしでC#のコンパイル【小ネタ】

御託

最近ブログの出番が回ってこないのでネタが溜まってしまいました。基本的に気分が乗らないと書けないのですが、今日はいい感じなのでここらで一気に書き出してみたいと思います。(2/10時点)
とのことだったのですが翌日2/11に昔ハマってたものに再ハマりしてしまい結局2/10に書いたこれ一本しか書き上がってませんでした。(ネタはあるのよ…)

さて今回はWindowsフォームアプリケーション入門とは別に、C#に関する小ネタを書いていこうかなと思います。
基本的にC#でコードを書く時はVisualStudioを使用するのが一般的ですが、セキュリティの都合やネットワークの関係でVisual Studioをダウンロードできない・インストールできない場合や、Visual Studioが入っていない端末で一時的に作業しなければいけないなどVisual Studioを使用できない事が多々あると思います。

そんな時ふとC#のプログラムが書きたくなったらどうしましょう。コンパイルできません。困りました。禁断症状で夜しか眠ることが出来ません。

でも大丈夫!C#はそんな迷える子羊のために素晴らしいものを用意してくれています。

コンパイル方法

・使うもの
C:\Windows\Microsoft.NET\Framework\(バージョン)\csc.exe
Windowsに標準でインストール済みです
※(バージョン)は各端末によって異なる場合があります

・使い方
コマンドプロンプト
「C:\Windows\Microsoft.NET\Framework\(バージョン)\csc.exe C:\main.cs」

御託2

なんということでしょう。Visual Studioが使用できない環境でもC#で書いたソースファイルをexeにすることが出来ました。これには迷える子羊たちも大喜びで庭を駆けずり回っています。かがくの ちからって すげー!

でもでもちょっと待って。これFile.ReadAllTextとか使えなくない?意味なくない?ちゃうちゃうちゃうんちゃう?

コンパイルに便利なバッチ

コンソールアプリケーション用バッチファイル

@echo off
rem ソースファイルと同じディレクトリにこのバッチファイルを配置してください。
rem バッチファイルを実行すると同じディレクトリにあるソースファイルがコンパイルされます。
rem バージョン部分は各環境に置き換えて下さい。
cd /d C:\Windows\Microsoft.NET\Framework\v4.0.30319

set srcPath=%~dp0*.cs
set exePath=%~dp0%~n0.exe

set dllPaths=system.dll,system.drawing.dll,system.windows.forms.dll,system.io.dll,System.Reflection.dll

csc.exe /optimize+ /out:%exePath% %srcPath% /r:%dllPaths%

echo %ERRORLEVEL%

if %ERRORLEVEL% == 0 (
  goto SUCCESS
) 

pause

:SUCCESS

コンソールアプリケーションサンプルソース

using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Text;
using System.Reflection;
using System.Diagnostics;

namespace chivsp
{
    public class Class1 
    {
        static void Main()
        {
        	Console.WriteLine("ハロワ");
        }
    }
}

Windowsフォームアプリケーション用バッチファイル

@echo off
rem ソースファイルと同じディレクトリにこのバッチファイルを配置してください。
rem バッチファイルを実行すると同じディレクトリにあるソースファイルがコンパイルされます。
rem バージョン部分は各環境に置き換えて下さい。
cd /d C:\Windows\Microsoft.NET\Framework\v4.0.30319

set srcPath=%~dp0*.cs
set exePath=%~dp0%~n0.exe

set dllPaths=system.dll,system.drawing.dll,system.windows.forms.dll,system.io.dll,System.Reflection.dll

csc.exe /t:winexe /optimize+ /out:%exePath% %srcPath% /r:%dllPaths%

echo %ERRORLEVEL%

if %ERRORLEVEL% == 0 (
  goto SUCCESS
)

pause

:SUCCESS

Windowsフォームアプリケーション用サンプルソース

Form1.cs

using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Text;
using System.Reflection;
using System.Linq;
using System.Collections;
using System.Collections.Generic;

namespace chivsp
{
    public partial class Form1
    {
        public Form1()
        {
            ComponentInitialize();
        }
        
        private void button_Click(object sender, EventArgs e)
        {
        	textbox.Text = "はろわ";
        }
    }
}


Form1.Designer.cs

using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Text;
using System.Reflection;

namespace chivsp
{
    public partial class Form1 : Form
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new Form1());
        }
        
        private TextBox textbox;
        private Button button;
        
        private void ComponentInitialize()
        {
            textbox = new TextBox(){
                Location = new Point(5, 5),
                Size = new Size(this.ClientSize.Width - 5 - 5, 40),
                Anchor = (AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Left),
                Font = new Font("MS ゴシック", 9),
            };
            
            button = new Button(){
                Location = new Point(5, textbox.Location.Y + textbox.Size.Height + 5),
                Font = new Font("MS ゴシック", 9),
                Text = "ぼったーん",
            };
            
            button.Click += button_Click;
            
            this.Controls.Add(textbox);
            this.Controls.Add(button);
        }
    }
}

解説

Windowsには標準で.NET Frameworkがインストールされています。.NET Frameworkにはご覧のようにC#コンパイラが同梱されており、それを使用することでC#コンパイルを行っています。基本的なコンパイルだけなら「コンパイル方法」で説明したような一文で十分ですが、.NET Frameworkのクラスライブラリを使用したい場合、「コンパイルに便利なバッチ」の様にソース中で使用するdllをコンパイラオプションで指定する必要があります。
以前どこかのページで見た上記と同じ様なバッチファイルでは、コンパイル対象のソースの先頭のusingからdll名を推測して自動で取得してくるような処理がありましたが、そもそもIDEが無い環境で現在指定してあるdllのクラス以外を使用する様なコードを書くことはまず無いと思うので、特に実装するつもりはありません。
またexeだけでなくdllも作成できるのでやろうと思えばガッツリ開発も出来ると思いますが、同じくIDEが無いのでそこまでガッツリやる必要もあまりないでしょう。

コンパイラオプションに関する詳しい解説は下記のURLから参照して下さい。
C# コンパイラ オプション - https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/compiler-options/

終わりに

非開発環境で急にプログラムを実行しなければならなくなった時、Windowsバッチやシェルなどの選択肢がありますが、それよりも普段書いて慣れ親しんでいる便利で高速で生産性の高いC#で書ければ非常に効率良く作業が行えます。是非活用してみて下さい。

コミュニケーションを上手く行う方法

心理学とは?

心理学と聞いて、皆さんはどんな話を思い浮かべるでしょうか?
座る位置によって相手への好感度を図る、腕を組むのは警戒している、足の向いている方向で興味があるかどうかなど、行動に対する心理分析には、色々なパターンがあります。
全てを知っていればコミュニケーションを取るのはかなり容易くなります。なぜなら相手が興味があるかどうかや、楽しんでいるかどうか、不快に思っているかが分かるので、会話や行動を変えることが出来るからです。
しかし、全てを意識しながら上手く会話をするのはとても難しい事です。とてもすぐに出来ることではありません。
これらは応用心理学といわれる分類になります。
心理学は大きく分けると基礎心理学応用心理学があり、基礎心理学は観察や調査によって法則や傾向を探求する事で、応用心理学とは基礎心理学で研究された内容を、コミュニケーションやスポーツなどの分野の問題解決や改善を行う事を言います。
詳しくはWikipedia心理学 - Wikipedia)など参照してください。
ちなみに他のサイトを探すほうが皆さんの興味のあるものに出会えると思います。

紹介したい心理学テクニック

いろんなパターンを知っていく中で特に皆さんにおススメしたいテクニックがあります。
それは「同調ダンス」と言われる相手の言動に合わせ言動を行うものです。
相手の警戒心を和らげたり、好意を持ってもらう事が出来ます。ただ真似すれば良い訳ではありませんのでご注意ください。
成功させる方法それは「さり気なく真似する」だけ、真似していると悟られないように真似する事が出来れば効果を得られます。
同じ趣味を持ってる人同士がすぐ仲良くなったりするのと同じ原理なのです。
是非皆さんも私生活や職場などで、初対面の方や上手く付き合えない方などに試してみてはどうでしょうか?

【採用】シベスピ社員との交流会実施!!【告知】

日頃からブログを読んで頂いている皆さま、並びに本日初めてブログを見た方、初めまして!
採用チームブログ担当の本多と大畠です。

新年を迎えて弊社も従業員数が見事(!)20名を迎えることができました!
成長を続けている今、さらなる発展をすべく今回から私たち採用チームによるブログ活動は始まりました。

その活動第一弾として、弊社では来月に交流会を開かせていただきます!

概要

**************************************
【シベスピ社員と交流してみませんか?】
シベスピでは、2月17日に当社社員との交流会を企画しています。

社員の生の声が聞ける!会社の人の雰囲気が分かる!
実際に働いてみたアレコレ…など、知りたい事何でも聞いてください!
お茶菓子をご用意してお待ちしております。

日程:2月17日 (土曜)
時間:10 時 00 分 ~ 14 時 30 分 で開催中
   ※時間内であれば、いつでも入退場可
開催場所:東京都豊島区池袋2-43-3 田村ビル4F
   ※池袋駅西口から徒歩5分ほどで到着出来ます
参加方法:事前予約等の行為は一切不要!当日本社まで足をお運びください!
**************************************

気軽に社員からリアルな話が聞ける!

転職サイトや説明会では見れない(聞けない)会社の内情。
実際に現場で働いている社員と直接交流を取って頂くことで、転職にまつわる不安や悩みに真剣にお答えします!

■求人サイトからどんな会社なのかまだイメージがついていらっしゃいませんか?

■シベスピで働いている社員はどんな人たちなのか気になりませんか?

■そもそも、IT業界ってどんな所なのか知りたくありませんか?

経験者、未経験者は問わず、どなたでも自由に参加することができます。
当日は軽食を用意していますので、気軽にご来社ください。
社員もこれから仲間になるかもしれないメンバーなので、求人広告からは分からないリアルな話に、社内の雰囲気など、なんでも正直に答えちゃいます!

社員一同(若手から社長まで)、皆様のご参加をお待ちしております!
奮ってご参加ください!


以上!採用チームからのお知らせでした!

スキルアップ(成長)三原則

以前夕会でスピーチした内容ですが、全体的にあまり理解されていなかったのと、理解していなかったメンバーにスポ根マンガの話に置き換えて説明したら「凄く良く分かりました!」って言われたので、、、私もマンガは好きですし、伝わってこその内容でもあるので名作スポ根『ピンポン』『スラムダンク』の名言をはさみつつ記事化しておきます。
再度振返ってもらえればと思います。

スキルアップのポイントおさらい

スキルアップのポイントを簡潔にまとめると以下の三点です。

1.実践(業務)外で理解を深める。
2.実践において「1.」で深めた理解を相対者(顧客・上長・部下)に合わせて実施・応用させる。
3.実践内容についてスキルが有って理論的側面を理解して自分に適切な助言をくれる人を1人か2人見つける。

次から各ポイントの詳細を解説します。

1.実践(業務)外で理解を深める

我々の業務に当てはめれば「良い本を読んで、自分で考える時間を設ける。」「良いソースコードに触れて、何故良いのかを考え・理解する。」などかと思います。
それが身に付いたかどうかを確認する意味での「資格の取得」は手段として有ります。

『何百万本もうってきたシュートだ』(流川)
⇒準備を超える成果などありませんね。

『優劣を明確にするために試合が存在する』(ドラゴン)
⇒実践(業務)はあくまで準備の結果を表す場です。

2.実践において「1.」で深めた理解を相対者(顧客・上長・部下)に合わせて実施・応用させる

3.実践内容についてスキルが有って理論的側面を理解して自分に適切な助言をくれる人を1人か2人見つける

「2.」「3.」は相互にリンクが強いので合わせて解説すると、

色んな人の意見を聞いて、
色んな人の意見を参考にして、
自分が良いと思う情報を取捨選択して、
色んな人のスキルを盗もう
と考えている人で「凄いな!」と思った人は1人もいません。
悪い典型です。
そういった人はそもそも自分に合った良い情報を取捨選択できるという良く分からない勝手な自信を有していますが、
それが出来る人は人に教わらなくともスキルアップ出来る人です。
「スキルを盗む」とかではなく「より深く理解を深める」ことが必要です。

実践外でどれだけ理解を深めて、
実践でどれだけそれを反映させて、
適切に評価を受けて独りよがりにならないか。それが肝要です。

『君の意思は信じている とりあえず日本一の高校生になりなさい』(安西先生
『よろしく ご指導ご鞭撻のほど…』(流川)
⇒意志を持つことも大事。しかし指導者の声に素直に耳を傾け、独りよがりにならないように客観視して軌道修正することはもっと大事。


結局知識だけ得ても、独りよがりでは通用しない。
自分の理屈だけで行動してしまうので、表面上の理屈は分かっていても、
相対者の感情が追えない。
相対者の思考が追えない。
そういった人はどれだけ理論が正しくても、
相手の要望・要求とかけ離れてしまえば良いシステムなど構築できません。
どれだけ賢くても、相手に合わせることが出来ない人間には良いシステムは作れません。
社長が我々をサービス業だという所以がこの辺りにあります。

まとめ

まとめは繰り返しにもなりますが、
実践外で理解を深めて、
実践で深めた理解をうまく相手に合わせて応用させることが大事です。
それをするに当たっては、
自分で考えること、
自分で考える力を身に付けること。が肝要です。
だからシステム部長はいつも「考えろ」と言うんですね。

その後は、実践あるのみです。
実践を「準備を披露・反映する場と捉えて楽しみながら」ひたすら実践です。
エンジニアの皆さんに置き換えると、コードを書いて書いて書き倒すことです。
指示を的確に理解して、重要性を理解できるまでテストしてテストしてテストすることです。
シニアエンジニアの皆さんに置き換えると、顧客業務を想いながら設計に没頭することです。
エンジニアにコードレビューなどを実施して、人にモノを教えることで再確認する自身の不足などを発見・補って、更なる成長の糧にすることです。

『基本が大事!! だろ?ゴリ』『その通りだ』(花道・ゴリ)
⇒先輩は粘り強く、後輩を信じて指導する。後輩はその期待に全力で応える。

『あんたはオイラに飛び方を教えてくれた』(ペコ)
⇒上長はドラゴンになる位の気持ちで部下(ペコ)を実践指導する!


そして最後に、
本当に信頼できて「この人が言う事は間違いないんだ」という人に質問・相談することです。
自分と同レイヤーの人に質問・相談することは無意味です。
何故なら間違った答えが返ってくる頻度が高すぎるからです。
うちの社長とシステム部長は「個人の能力で100人月のシステム開発を成功に導ける」人です。
業界にいてリーダーなどを任されるようになると強く感じますが、なかなか居ない稀有な人材です。
私は自信を持って、
「実践内容についてスキルが有って理論的側面を理解して自分に適切な助言をくれる人を1人か2人」
として紹介が出来ます。
但し、エンジニアの皆さんとではスキルに開きが大きすぎて今は皆さんが適切な助言を受けても理解できないことも多いと思います。
ですので弊社はピラミッド型の組織を用意しています。そして十分に指導が行きわたるように、1人の上長に部下2人、という体制を取っています。
まずは同レイヤーではなく上長に質問・相談するところから始めましょう。
そして上長がうまく説明できなければ更に上長へエスカレーションすれば良いのです。
その行動の中で上長は『本当に信頼できて「この人が言う事は間違いないんだ」という人』になろうと努力し、
その努力と助言を受けた部下も成長を実感し、単純に役職の上下では無い相互成長の作用が生まれると思っています。

『愛してるぜ ペコ』(おばば)
⇒苦しくても苦しくても、逃げるより前に進むことの方がずっとキミを幸せにする。

『お前を超える逸材がここにいるのだ…!!』『しかも 2人も 同時にだ……』(安西先生
⇒社長や部長にこんなコメント吐かせたいですね!


以上です。

部長の小言①

昨年システム部の面談を行った時に気付いた事を、何回かに分けて書こうと思います。

第一弾は「仕事をお願いされた時に必ず決めて(確認しておかないと)おかないと駄目なこと」についてです。
結構当たり前なことではあるのですが、当社はまだまだ若いメンバーが沢山いるのでこの辺りも意識していないんだなーと面談で感じたので書こうと思います。

日々の仕事で上長、リーダー等から「これこれの仕事お願い」という場面があると思います。ここでちゃんと確認しなければいけないことが2点あります。
1点目は納期です。仕事を頼まれたら、必ずいつまでに終わらせば良いですかと確認してください。
2点目は伝えられた仕事の内容が具体的か、もし具体的でないなら、ゴール(仕事の完成状態)の認識に齟齬が生まれる可能性が高いので、齟齬が生まれないようにしつこいくらい確認してください。

この2点を確認してようやくゴールに向かって手段を考えることができます。手段を考えたら後は突き進むだけです!!

これは日々の仕事だけではなく、どの様な仕事でも当てはまると思います。大きなプロジェクトも必ず納期があり、納品物があります。納期は当然のことながら、納品物の齟齬がないかはしつこいくらい確認を行わないと、トラブルジョブの原因になったりします。
今まであまり意識していなく、お願いした人から2点が伝えられていなかったら、この記事を見た日から必ず聞くようにしてください。

(続)呪いの連鎖が止まらない

(続)呪いの連鎖が止まらない

前回、呪いの呪縛が解け、水槽が安定してきたと勘違いしていた佐藤です。

初めてのトリミング

シュリンプの話題に触れる前に、水草のお話しを。

水草って成長早いですね。。。。
あっという間に伸びてしまって、2,3週間に1度トリミングしないと密林のようになってしまい、シュリンプや魚たちが見えづらくなってきます。

なので、会社帰りにハサミを買って、トリミングを行ったのですが、
これが意外と難しい。(単に不器用なだけなのか・・)

折角なので、これまでポットに入っていた水草も、トリミングして、重しをつけて、植え替えてやろうと、あちこちいじりました。
水槽のコケも綺麗にして、水も3分の1ほど交換して、ってやっていると、気が付くと夜中の2時に。。。
早く寝ないと朝が辛くなる~と、その日はそこまでやって寝たのですが、次の日から・・・

やらかしてしまった。

また、毎日のように1匹、1匹とお亡くなりになってしまう。。。
土を少し掘り返したからなのか、水を足すときに入れたコケ防止剤がダメだったのか、
水草につけた重しのせいで水質変わったのか・・・
いくつも思い当たる節はあるけれど、、、、

なんだこれ!

がっくりしながら亡くなったエビの救出(放っておくと魚が食べちゃう)を行っていたら、
なんとお腹が黄色いシュリンプがいるではないですか!

もしや、これは噂の抱卵ってやつですか?

f:id:chivsp:20171222125457j:plain

ついに、減るだけじゃなく、増える日が来たのか!

何てしみじみと、考えていると、そもそも、タマゴってこんな色してるものなのか?って疑問が湧いてきました。
もしかしてやばい病気だったらどうしよう・・・なんて、不安になってきたので、調べてみました。

なるほど、色は変わっていって、生まれるまでは2~3週間らしい。

怖いよ~ 怖いよ~

呪いの連鎖はこの母エビには回ってこないで~なんて、考えながら見ているのですが、
少しずつ呪いも止まってきて、お亡くなりになる頻度も下がってきた(単に個体数が減っているだけかも)のですが、
また何かあったらと、水槽の手入れが怖くて出来ない。。。

水草は伸びきってるし、コケもいっぱい生えてくるし(><)
何とかしなければと思いつつも、水足しだけの日々になってる。。。

早く生まれてくれー!!

次回は、生まれた後のことが書けるといいな。

※これまで40cm水槽を使っていたのですが、水質をもっと安定させるために60cm水槽を購入しちゃいました。。。
 水槽の大きさ換えると、台や機材も買い替え、買い足ししないといけなくて、妻に内緒で買ったので、届くのが怖いです。。。

呪いの連鎖が止まらない

最近、熱帯魚を飼い始めた佐藤です。

ネットショップでこんなものが

日用品をネットショップで購入しているのですが、ある日、そのネットショップでペットショップ部門が出来ましたとの広告が。
熱帯魚の特集がやっていて、中々にかわいらしかったので、ポチっ!としてしまいました。

購入したのは『ベタ』って小さな魚で、全てセットで購入したので、届いてから設置までは簡単に行えました。

こんな感じ!
f:id:chivsp:20171127161936j:plain

ところが、いざ飼い始めると、水がすぐに汚くなったり、ヌメヌメしたものが浮いてきたり、、、

それに、床に水槽を置いているのがかわいそうになってきたりと、愛着も出て来て、、、

色々調べていくと、とても奥が深く、どんどんのめり込んでしまって、気が付くと毎日ネットショップから宅配便が届くことになっちゃいました。
(妻からはまた届いてるけどと、呆れられています。。。)

そんなこんなで、夜な夜な設置作業を行ってしまって、寝不足気味になってます。

やり出すと、もっとレイアウトにも懲りたくなってきて、もう少し大きめの水槽を買って、さらにシュリンプも飼いたいってなって・・・もう大変。

f:id:chivsp:20171124183321j:plain
f:id:chivsp:20171124183333j:plain
f:id:chivsp:20171124183344j:plain

何の呪いだこれ

ところがこのシュリンプ、飼うのが簡単って書いてあったのに、物凄く難しい(私にとっては)。
水が立ち上がっていない状況で投入したものだから、ドンドン死んでいく。。。
毎日会社から帰ると、1匹ずつお亡くなりになる呪いのような状況が1週間も続きました。
ろ過装置の追加(底床ろ過と外部ろ過)や、冠水作業と、試行錯誤しながら、水質改善に取り組み、ようやく呪いが解け、安定してきました!

f:id:chivsp:20171124183716j:plain

そんな悩みや作業を、お昼を食べながら毎日話していると、黒田マネージャーから何屋さんですか?と手厳しい突っ込みが・・・

社内にも水槽を置いて、会社を良くする会で、生き物係を作りたい!って言ってくれる子が出てこないかなーと思いながら、みんなに熱帯魚飼わないと勧めているのですが、中々興味を示してもらえない。。

現在、サーバーを作ろう会で、一からPCを組み立てているので、そのサーバーを水槽の中に入れられないかなと密かに企んでいる今日この頃です。