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

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

仕事における具体性と根拠

ある飲み会での一幕から・・・

久しぶりのブログ更新になります。
鎌野です。

最近思うところもあり、このブログで書きたいと思うことを書きます。

今回の話は、ある飲み会での話から始まります。

とある仕事を一緒にしている方と飲んでいたときに仕事について話をする機会がありました。

「お前の話は抽象的すぎるんだよな。具体性をもって話せ!」

と言われました。
自分自身、具体的に話しているつもりでいたのですが、もっと具体的に話さないとわからないよと注意されました。

そのときは、もう少し掘り下げて話さないといけないのかなと思うくらいの話でした。

その後の仕事での話

現場が変わり、仕事が以前より忙しい日々が続くようになりました。
今回の仕事は、あるアプリケーションの機能追加する作業でした。
作業を上司に報告し、スケジュールを作成して見てもらっているときに、
「ここはどういう風に考えてこうしたの?」と聞かれたときに、自分の考えを伝えました。
そのときに「具体性に欠けている、根拠がない。」と指摘を受けました。

そのときは、こう考えていると伝えたが、上司からじゃあここはどう考えているのと突っ込まれたときに返答することができませんでした。

「もっと考えろ!仕事を丁寧にやれ!」と言われました。

仕事における具体性と根拠とは

今回の話で言うと、指摘前の自分としては
1.とりあえず、作業工程を洗い出し、この機能はこの改修が必要だからこれくらいかかる。
2.ここでの作業は機能追加対象のアプリケーション作成したときは、これくらいかかったから、これくらいかかる。
といった感じで考えていました。
上司からは、
1.作業工程の洗い出しはいいが、各機能で何ができていて、何ができていないか確認したのか。確認したうえで、どういう作業が発生するか見積もる必要がある。
2.機能追加対象のアプリケーション作成を作成したときに使用できる資料などもあるので、それを使用すればスケジュールを短縮できるはずだが、それは確認したか。確認したうえで、それが使用できるか判断し、スケジュールを立てなければならない。
3.曖昧に見積もるのではなく、具体的に何の作業が残っていて、どうする必要があるかを調べる必要がある。
と言われました。

作業としてどのようなことがあるか、より具体的な内容を理解し、それを根拠として今回の作業を進めていく必要があることを痛感しました。

皆さんの仕事ではどうですか?

今回は私の体験談です。
失敗することから学ぶことも多いと思います。
今は、具体的な話と根拠をもって作業に取り組もうとしていますが、なかなか簡単にはうまくいきません。

作業は違えど、どのような仕事においても作業を実施するにあたり、具体的な話をしなければならない、根拠を示さなければならないといった機会は必ずあると思います。

そういったことが来る前に、もう一度作業に対する具体性と根拠について、皆さまでも考えてみてください。

直観で仕事をするわけでもなく、浅い考えで仕事をするわけでもない。
深く、論理的に、そして、客観的に今行っている作業の具体性と根拠について、今一度立ち止まって考えてみてはいかがでしょうか。

そういったことが、今後のステップアップに役立つようになれば、今回のブログを書いた意味もあるのかもしれません。

春じゃないのに!

こんにちは。最近、朝晩はめっきり寒くなりましたね。もう冬です。
さて、季節的には過ぎてしまいましたが、今回は私が秋に経験したことについて書こうと思います。

季節の変わり目

季節の変わり目には体調不良になりやすいと良く聞きますが、
私の場合は特に春が寒暖差と花粉症のせいで体調を崩しやすく、苦手なシーズンです。
同じように季節の変わり目となる秋については、暑いのが苦手な私にとって涼しくて過ごしやすいシーズンです。
※春に花粉症で苦労した件については、前回のブログに記載しましたので、気になる方はそちらを見てください!

しかし、今年の秋は例年の過ごしやすい秋とは違いました。。。

秋の散歩

某ゲームの影響もあり散歩する機会が増えた私ですが、ある日から鼻がムズムズし、くしゃみを頻発するようになりました。
最初は風邪でも引いたのかと思いましたが、熱はなく次第に鼻水が出るようになり、目も痒い!
何だか似たような経験を春にもしたなと思いました。
そう、花粉症です!!
そのため、急ぎ春と同様の対策をして、なんとか症状を緩和させました。

花粉症について

花粉症について改めて調べてみると、花粉は春だけでなく年中飛散しており、花粉症を引き起こしていることがわかりました。
その中でも春と秋は、注意が必要なようです。
また、秋は春よりも寒暖の差が激しいため体調を崩す人が多く、風邪と症状が似ていることもあり、花粉症だと気付きにくいようなので、
特に春先花粉症で悩まされている方は、症状を見極めて対策する必要があります。
私は、花粉症になるのは春だけだと思っていたので驚きです!


今年の春も秋も準備不足で酷い目に合いましたが、
来年は春が来る前に花粉対策して、花粉に負けずに乗り切ろうと思います!

【WEB UI操作自動化】Seleniumを使ってみよう【Java×Chrome】

気温36度って体温か!
と見えない何かに突っ込みを入れていたのも束の間。
もうすっかり寒くなりましたね。

今回は、Seleniumを使用して、下記を実施しようと思います。
 ① 当社WEBサイトのTOPページに遷移
 ② TOPページから問い合わせページに遷移
 ③ 問い合わせページに内容を入力し、エラーで引っかかるようにする

1. まずSeleniumって何?

SeleniumとはWEB UI操作の自動化フレームワークです。
要するに何が出来るかというと、コードを書いて実行すると、WEBサイトの操作(リンク押下・フォームへの入力等)が自動で実行でき、今までテストのために手でやっていた操作を自動で出来るという優れものです。

2. Seleniumの種類と今回の実施する環境

Seleniumには種類が二つあります。
 ① Selenium WebDriver
 ② Selenium IDE
①はプログラムを書いて実施するもの。
②はブラウザの拡張機能をインストールして、GUIで操作・実施するものです。
今回は① Selenium WebDriver を使用しようと思います。
また、Selenium WebDriverはさまざまな言語(Java/C#/Ruby等)で実装できるのですが、今回はJavaを選択します。
さらに、ブラウザについてもさまざまなブラウザを使用することが出来るのですが、今回はChromeで実施します。

3. ダウンロード

まず、各公式サイトから下記の二つをダウンロードします。
 ① Selenium WebDriver
 ② Chrome Driver

Selenium WebDriver のダウンロード

Selenium WebDriverのダウンロードページ(https://www.seleniumhq.org/download/)を開きます。
画面をスクロールしていくと、「Selenium Client & WebDriver Language Bindings」というタイトルが出てくるので、JavaのWebDriverをダウンロードします。

Javaを選択

Chrome Driver のダウンロード

Chrome Driverのダウンロードページ(https://sites.google.com/a/chromium.org/chromedriver/downloads)を開きます。
Chromeのバージョンごとに使用できるDriverがことなるので、使用するChromeのバージョンにあわせたものを選択します。

私の使用しているChromeは76
そして使用しているPCのOSにあわせたDriverをダウンロードします。
私が使用しているのはWindows

ダウンロードしたファイルは解凍しておきます。

4. 設定

eclipseを使用してプロジェクトを作成します。

今回はTestSeleniumというプロジェクト
上記でダウンロードしたファイルを配置するためにディレクトリを作成します。
ディレクトリ作成
作成したディレクトリにダウンロードしたファイルを配置します。
Seleniumはlibsしたのファイルも含めて配置します。
seleniumのライブラリにビルドパスを通します。
ビルドパスを通す

設定が完了したのでテストとしてこんなjavaファイルを作成して実行してみます。

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class Test
{
    public static void main(String args[])
    {
        // ChromeDriverのパスを設定
        System.setProperty("webdriver.chrome.driver", "chromeDriver/chromedriver.exe");

        // WebDriverのインスタンスを作成
        WebDriver driver = new ChromeDriver();

        // 開きたいサイトのURLを引数に指定
        driver.get("http://www.chivsp.com/");
    }

}

そして実行すると。。ブラウザが起動され、引数に指定したURLが表示されます。
ChromeのURL欄の下には、自動テストソフトから起動した旨が記載されています。

開いた!

5. テストの準備

今回Seleniumで出来なきゃいけないことは下記となります。
 ① 指定URLのサイトをブラウザで開く。
 ② サイト内のリンクまたはボタンを押下する。
 ③ サイト内の入力フォームに値を入力する。
①にいてはテストで実施したので、②~③の実施方法を見て行きます。

② サイト内のリンクまたはボタンを押下する。

まずはクリックする対象の要素を取得します。
取得する方法としてはJavaScriptのように、HTMLのID属性やName属性、Class属性などからも取得できますし、
リンクの文字列やXPathからも取得できます。
今回は要素を特定するためのID等は振っていない要素を操作するので、Xpathを使用して実装していきます。

クリックしたい要素はこちらの「お問い合わせ」リンクとなります。

お問い合わせ

ChromeディベロッパーツールでXpathを取得します。

Xpath取得

要素を取得して、clickするメソッドを呼ぶ記述は下記となります。

driver.findElement(By.xpath("//*[@id='navigation']/ul/li[5]/a")).click();

③ サイト内の入力フォームに値を入力する。

サイトのフォームに値を入力する方法も、上記のクリックする方法と変わりません。
Xpathを取得し、下記のように記述します。

driver.findElement(By.xpath("/html/body/div[1]/div[1]/form/div[1]/div/input")).sendKeys("会社テスト");

5 .いざ実行

上記の基本的な内容を使用し、用意したコードがこちらとなります。

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class Test
{
    public static void main(String args[])
    {
        // ChromeDriverのパスを設定
        System.setProperty("webdriver.chrome.driver", "chromeDriver/chromedriver.exe");

        // WebDriverのインスタンスを作成
        WebDriver driver = new ChromeDriver();

        // 開きたいサイトのURLを引数に指定
        driver.get("http://www.chivsp.com/");

        // お問い合わせリンクをクリック
        driver.findElement(By.xpath("//*[@id='navigation']/ul/li[5]/a")).click();

        // お問い合わせボタンをクリック
        driver.findElement(By.xpath("/html/body/div[1]/div/div[3]/p[2]/a")).click();

        // 入力
        driver.findElement(By.xpath("/html/body/div[1]/div[1]/form/div[1]/div/input")).sendKeys("会社テスト");

        // チェックボックスにチェックを入れる
        driver.findElement(By.xpath("//*[@id=\"check\"]")).click();

        // ボタンを押下する。
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
    }
}

そして実行した結果がこちら。
https://cdn-ak.f.st-hatena.com/images/fotolife/c/chivsp/20191103/20191103201953.gif

6 . Seleniumって便利!

以上、さわりではありますが、Seleniumを使用してサイトを動かすことが出来ました。
これにJUnitを組み合わせたりすると、テストも出来ますし、画面キャプチャを取得する機能も、Seleniumにはあります。
もちろん、Javaで実行しているのでテストデータの挿入等もできるので、テストする上で実施しなければいけなかったことはほとんどコードで完結することが出来ます。
WEBシステムの同じ機能をずっとメンテナンスする場合等は一度書いておくと楽ですね。

以上、Seleniumを使ってみようでした。

【C#】Visual Studio 2019 インストール【Windowsフォームアプリケーション】

インストーラのダウンロード

MicrosoftVisual Studio 2019のダウンロードページに飛びます。
ダウンロード | IDE、Code、Team Foundation Server | Visual Studio

Visual Studio 2019」の「Community」の「無料ダウンロード」をクリックすると、インストーラのダウンロードが始まります。
f:id:chivsp:20191026195710p:plain

ダウンロード終了後、インストーラを実行します。
f:id:chivsp:20191026195800p:plain

インストール

ライセンス条項等は適当に読み飛ばして「続行」をクリックします。
f:id:chivsp:20191026195929p:plain

インストーラの準備が完了するとインストール対象の選択ができるので、必要な対象を選んで「インストール」をクリックします。
f:id:chivsp:20191026200125p:plain

インストールが開始されるので、完了するまで待機します。
f:id:chivsp:20191026201117p:plain

サインイン

インストールが完了するとサインインを求められるので、「サインイン」をクリックします。
f:id:chivsp:20191026201406p:plain

アカウントを持ってない場合、「作成してください」をクリックしてアカウントを作成してください。その際の手順は下記ページを参考にしてください。
【C#】Visual Studio 2017 インストール【Windowsフォームアプリケーション】 - 株式会社シベスピ 従業員ブログ

今回はVisual Studio 2017をインストールした際にサインインしてあったため、特に何もせずサインインが行われました。
f:id:chivsp:20191026202548p:plain

下の画面が表示されたらインストール完了です。「コードなしで続行」をクリックして、ライセンスの登録を行います。
f:id:chivsp:20191026202621p:plain

ライセンスの登録

「コードなしで続行」をクリックするとIDEが開くので、右上のアイコンから「アカウントの設定」をクリックします。
f:id:chivsp:20191026203118p:plain

「更新されたライセンスの有無を確認」をクリックします。
f:id:chivsp:20191026210207p:plain

下記の画面になるので、これでインストールはすべて完了です。
f:id:chivsp:20191026210535p:plain

後書き

とっくの昔にリリースされていた2019ですが、書かなきゃいけない気がしたので書いてみました。正直C# 8.0どころか7.0~7.3の機能も使いこなしてないので、インストールする必要はあったのか🤔🤔🤔という感じもします。


記事内容とこれっぽっちも関係はありませんが、今年の夏に富士山に行ってご来光アメイジングしてきました。
f:id:chivsp:20191026193516j:plain

幸いにも高山病の症状もなく初心者向けルートだったこともありサクサク登れました。予想以上に早く山小屋についたので外のベンチに座りながら、登ってくる人達の苦悶の表情を眺めてました。楽しかったです。
ちゃんと募金もしてきました。
f:id:chivsp:20191026194303j:plain

最終的には剣岳や奥穂のジャンダルムとか行きたいです。
富士山以降今日に至るまで雨と予定のブッキング一回しか山に登れず、つらみなIskがお送りしました。

【objective-c】iOSアプリ開発超初心者講座【アプリ作成編】

以前書いたXcodeのインストール編から1年以上経ってました。
今回はインストールしたXcodeで簡単な雪を降らせるアニメーションアプリを作って行こうかと思います。
プログラミング未経験の方に向けて、難しい説明などは割愛して、アプリ作成する流れを書いて行きます。

用意するもの

mac
Xcode

1.プロジェクト作成


まず、Xcodeを立ち上げて、「Create a New Xcode Project」をクリック。


アプリで使うテンプレートを選びます。
今回は、簡単なアプリを作るので、真っ白な画面だけが用意される「Single View app」を選択し「Next」をクリック。


プロジェクトの名前などを入力します。
ProductName:アプリの名前
OrganizationName:アプリを作る人の名前
OrganizationIdentifier:アプリを作る人のID(※適当で大丈夫ですが、アプリをリリースして売ったりする際は、他の人と被らないようにしないといけないです。)
Language:objective-cを選択
入力できたら、「Next」をクリック。


プロジェクトの保存先を選び、「create」をクリック。


すると、プロジェクトが作成されます。

2.Main.storyboard


次に、左側の一覧にある「Main.storyboard」を選択します。
すると、中央に白い枠が出てきます。これはアプリを起動した際に開かれる画面で、どういうものを配置するのかを決めていきます。
今回は雪を降らせるので、白い背景では雪が映らないため背景を作っていきます。


白い枠をクリックし、赤枠で囲ったところを選択すると、画面の背景色を指定できるので、それっぽい色に変更します。


画面的に寂しいので、下に人を配置します。


「Image View」を選択し、中央の枠にドラッグ&ドロップします。


人の画像ファイルを直接ドラッグ&ドロップします。
すると、ポップアップが出てくるので「Finish」をクリック。
(一緒に雪の画像も追加しておきます。)


無事画像が取り込まれました。


Main.storyboardに戻り、先ほど設置した「Image View」の枠をクリックし、右上の「Image」に追加した画像が表示されているので選択します。


これで、Main.storyboardでの作業は終了です。

3.ViewController

ViewControllerは表示される画面に色々な制御を加えるものです。
今回でいうと、雪の降るスピードや数などを制御しています。
ViewController.mに以下のコードを書いてみてください。

@interface ViewController ()
{
int snowCount;
double snowSpeed;
NSMutableArray *snowArray;
NSTimer *timer;
}
@end

@implementation ViewController

  • (void)viewDidLoad {

[super viewDidLoad];

snowCount = 0;
snowSpeed = 0.8;
snowArray = [NSMutableArray new];

timer = [NSTimer scheduledTimerWithTimeInterval:0.01
target:self
selector:@selector(snowFall)
userInfo:nil
repeats:YES];
}

  • (void)snowFall

{
if (snowCount >= 20) {
[self fall];
snowCount = 0;
}
snowCount++;

for (int i=0; i<[snowArray count]; i++) {
UIImageView *imageView = snowArray[i];
int randx = arc4random()%2;
imageView.center = CGPointMake(imageView.center.x+randx,
imageView.center.y+snowSpeed);

if (imageView.center.y > self.view.frame.size.height) {
[imageView removeFromSuperview];
[snowArray removeObject:imageView];
}
}
}

  • (void)fall

{
UIImageView *snowimageView = [UIImageView new];
snowimageView.image = [UIImage imageNamed:@"snow.png"
int randH = arc4random()%10;
int randT = arc4random()%10;
if (randH <=5) {randH = 10;}
if (randT <=5) {randT = 10;}
snowimageView.frame = CGRectMake(0, 0, randH, randT);
int rand = arc4random()%320;
snowimageView.center = CGPointMake(rand, -5)
[self.view addSubview:snowimageView];
[snowArray addObject:snowimageView];

}

  • (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end

赤で「雪の降るスピード」
水色で「雪の降る間隔」
青で「雪の画像」
緑で「雪のx座標、y座標、幅、高さ」
などを指定しています。

4.実行


左上の実行ボタンをクリックして、アプリを起動させてみましょう。
右側を選択すると、どの端末で起動するか選べます。iPhoneiPadを持っていたらUSBで繋げば実機に作成したアプリをインストールすることができます。

完成!


無事雪を降らせることができました!
「3.ViewController」で色付けした箇所をいじって暴風雪にしたり、石を降らせたりしてみて遊んでみてください!

次回また機会があれば、Xcodeの機能やobjective-cの文法などを書ければと思います。

好きな事に対する意欲

最近の出来事で、すごいと感じたことをブログに書こうと思います。

お出かけ編

ハワイから来たお友達に、何回か行ったことある鎌倉なら案内できると思い、鎌倉に行きました。
鎌倉のどこに行こうか相談したところ「長谷寺に行きたい」と言われましたが、私は長谷寺を知りませんでした。
調べてみると意外と有名だった(笑)
なぜ、鎌倉に何度か行ったことのある私が知らない寺をハワイの人が詳しいのだろう??
聞いてみたところ、鎌倉にはもう数十回も来てるそう。。。逆に案内されてしまった(笑)

転職編

ハワイから来たお友達が、転職して日本で仕事をやるとの事で、どんな仕事するのかと聞いてみたところメディア系で、初の仕事は中東での撮影に3週間くらい行くそうです。
日本で仕事したいんじゃなかったのか??
日本で働いていて、今回は出張するだけだから良いとの事。。。なるほど出張(笑)

共通点

「お出かけ編」と「転職編」を踏まえ、なぜハワイのお友達が鎌倉に詳しく日本で働きたいのか?
それは「日本が好きだから」です!
ただ日本が好きだから日本語を勉強し、お金を貯めて日本旅行をして、転職までしたのです。
「好きな日本のためになら何でもできるよ」と言われた時、確かに好きな事に関して調べたり努力するのは苦ではないと思いました。
何かやるべき事があるとき、好きなものに紐づける事さえできれば、出来ないことはないと思います。
私は病院で、軽くでも良いので運動をやりましょうと言われたので、好きなゲームで散歩を始めました(笑)
みなさんもお試しあれ(笑)

ボホール島観光レポート

少し間があいてしまいましたが、社員旅行のオプショナルツアーでボホール島へ行ってまいりましたので、簡単なレポートを作成しました!

★☆セブ島の市内観光をしたチームのレポートはこちら!☆★
chivsp.hatenablog.com

ボホール島観光

セブ島からは高速フェリーで約2時間、ボホール島はフィリピン国内で10番目に大きい島です。
goo.gl

今回のボホール島観光は、タグビララン港到着後、日本語が堪能なガイドさんと一緒に車で次の観光スポットを巡りました。

血盟記念碑

クライオン教会

ターシャの森

ロボック川 ランチクルーズ

チョコレート・ヒル

各スポットの概要

今回巡った各スポットの概要です。

血盟記念碑

スペイン占領時代、争いの終結と友好をお互いの誓い合ったことを記念する碑。
ボホール島の南側の海を臨む高台に位置しています。

血盟記念碑
スペインの初代総督レガスピとその家臣、ボホール島の酋長だったシカツナを模しており、当時の勇壮な姿がうかがえます。
【血盟】とは、お互いの腕を傷つけ、流れ出た血をワインに注ぎ、飲み干すことで約束を確固不抜のものとするフィリピンの伝統的な慣習だそうです。

クライオン教会

国民の9割がキリスト教徒であるフィリピンは、町ごとに教会が存在します。
クライオン教会はその中でも最古の教会の1つと呼ばれているそうです。
2013年のボホール地震により鐘楼や教会堂に大きなダメージを受けたそうですが、2018年修復が完了し、教会堂や鐘楼の見学をすることができました。

クライオン教会(外観)
クライオン教会(教会堂内)

ターシャの森

ターシャは、ボホール島のみに生息するフィリピンメガネザルです。

ターシャ
小さくてかわいらしいターシャですが、非常に繊細でストレスを感じると自殺してしまいます。
そのため、島外での飼育は難しく、ボホール島に来なければ会うことができません。

ロボック川 ランチクルーズ

ロボック川をクルーズしながら、フィリピン料理のビュッフェランチをいただきました。
キューカンバーモヒートがおいしかったです!

ロボック川 クルーズ
エメラルドグリーンの水面が美しく、ゆったりとした川の流れがとても気持ちの良い時間でした。

チョコレート・ヒル

チョコレート・ヒルズは円錐形の丘が点在する不思議な地形です。
200段を超える階段を登り、壮観な景色を眺めてきました。

チョコレート・ヒル
まだほんのり緑色ですが、乾季には丘の草木が枯れて、チョコレート色になるのがチョコレート・ヒルズの由来だそうです。

感想

出発前、乗り物が苦手な私は2時間の船旅に内心不安でいっぱいでした。
でも思い切って行って良かった!と思える時間となり、非常に満足しています。
ちょっと駆け足でしたが、ボホール島の自然と伝統を感じたツアーでした。