目次
1. 前提
2. 命名規則
3. 変数・定数の宣言
4. プロパティストア
5. コードの整形
6. コメント
7. 比較演算子
8. マジックナンバー(ハードコーディング)は禁止
9. スクリプトの高速化(スプレッドへのアクセスについて)
10.例外処理
1.前提
Google Apps Script は、Javascript がベースとなっている為、基本的には以下サイトの記載に従い実装するものとする。
Google JavaScript Style Guide
また、各コードについては基本的に以下手順にて JSLint でのチェックを行い、エラー(×印)の指摘が発生した箇所のみ全て解消するものとする。
(警告の発生箇所については修正不要)
JSLint
Source欄をクリアし、チェック対象のソースコードをコピー&ペースト
Options欄にて許容設定項目(Allow…)を全て選択、JSLintボタンを押下して検証開始
実行後、Source欄に表示される検証結果アイコンを確認、エラー(×印)の発生箇所を全て修正
2.命名規則
共通前提
共通の前提として、以下の通りとする。
●規則対象:変数名・定数名(プロパティ含む)・クラス名・関数名
●スコープの区別:グローバルの変数・定数の場合のみ、接頭辞”gl”または”GL_”を含めるものとする
●命名の記法:クラスはアッパーキャメル記法、変数名・関数名はローワーキャメル記法、定数名・プロパティ名は大文字スネーク記法とする
●名称の言語:英語
●配列・コレクション系変数の名称:複数系での表記(values, entries等)とする
●接頭辞:変数については後続での説明通り、以下の表に従って名称にデータ型の略称を含めるものとする
データ型 | 略称(接頭辞) |
---|---|
論理型 (Boolean) | bln |
数値型 (Number) | num |
文字列型 (String) | str |
長整数型 (BigInt) | bnt |
シンボル型 (Symbol) | sym |
配列 (Array) | ary |
オブジェクト (Object) | obj |
関数 (Function) | fnc |
●その他、原則としてはGoogleのJavaScriptスタイルガイド内の”naming”項目の記載に従うものとする。
Google JavaScript Style Guide – 6 Naming
変数
( グローバル接頭辞 + ) 型接頭辞 + ( 形容詞 + ) 名詞 ( + アンダースコア )
let glNumMovedRowNumber = 11; // グローバル変数
function doSomething() {
let numMovedRowNumber = 21; // ローカル変数
let objDog = new DogClass(); // ローカル変数
let objCat = new CatClass(); // ローカル変数
}
class DogClass {
constructor() {
this.strName = 'michael'; // 非定数フィールド
this.blnFromStray_ = false; // 非定数フィールド(private)
}
}
function CatClass() {
this.strName = 'jackson'; // 非定数フィールド
this.blnFromStray_ = true; // 非定数フィールド(private)
}
定数(プロパティ)
( グローバル + ) 型 + ( 形容詞 + ) 名詞
let GL_ROW_NUMBER = 12; // グローバル定数
function doSomething() {
let ROW_NUMBER = 22; // ローカル定数
}
クラス
( 形容詞 + ) 名詞 + Class
let objDog = new DogClass();
let objCat = new CatClass();
// クラス(class)
class DogClass {
constructor() {
}
}
// クラス(function)
function CatClass() {
}
メソッド(関数)
原則として、動詞 ( + 名詞 ) ( + アンダースコア )
let objDog = new DogClass();
objDog.outputData();
let objCat = new CatClass();
objCat.outputData();
class DogClass {
constructor() {
}
outputData() {
// publicメソッド
}
calc_() {
// privateメソッド
}
}
function CatClass() {
this.outputData = function() {
// publicメソッド
};
this.calc_ = functions() {
// privateメソッド
}
}
3.変数・定数の宣言
宣言キーワードについて
●変数の宣言はletを使用するものとし、varの使用は禁止とする。
●定数の宣言はconstを使用する。
宣言時のスコープ範囲の考慮
●スコープはできる限り小さく
●原則、変数・定数はなるべく狭いスコープで使用するようにする。
優先はローカルスコープ(ブロックスコープ→関数スコープ)→グローバルスコープの順。
・ブロックスコープ:if, for, while等の処理ブロック単位の範囲を指すスコープ。
・関数スコープ:関数単位の範囲を指すスコープ。
・ローカルスコープ:ブロックスコープと関数スコープの総称。
・グローバルスコープ:関数・クラス等の外側で宣言される、プログラム全体を指すスコープ。
●グローバルで使用する変数・定数については、
特定のスクリプトファイルのグローバル領域の先頭にまとめて宣言するか、
専用のスクリプトファイルを作成する等して、一元管理を行うようにする。
状況に応じてプロパティストア(後続で説明)の利用も考慮に入れる。
4.プロパティストア
●ファイルのIDや外部API類との接続情報等、
動作環境や運用状況に応じて変更が発生するような設定値・定数値については、
スクリプト内に定義せずにプロパティストアにて管理するようにする。
●プロパティについては基本的にスクリプトプロパティのみを使用すること。
(スクリプトプロパティのみIDE上から管理可能な為。
ドキュメントプロパティとユーザープロパティについては
コード上以外から管理する手段がない為、基本的に使用禁止とする。)
5.コードの整形
ステートメント
●ステートメントの終わりにはセミコロン「;」をつける。
●特別な理由がない限り1行に1ステートメントを記述する。
ネストとインデント
●ネストする場合は必ずその深さの分のインデントを設定する。
●ネストを深くし過ぎない。(3つ程度が目安)
●GASの場合、Shift+Tabでまとめて自動でインデント整形が行える。
function doSomething() {
let numCount = 0;
while (true) {
if (numCount++ > 20) {
break;
}
}
}
縦に揃える
●一行が長いときには、縦に揃えることを意識する。長いメッセージを生成する際やオブジェクトや配列のリテラルを記述する際等に有効。
function createLongMessage(aryParams) {
let strMessage = "";
strMessage += "<b>code: " + aryParams[0] + "\n";
strMessage += "status: " + aryParams[1] + "\n";
strMessage += "message: " + aryParams[2] + "</b>";
}
function createObjectVariable() {
let objProgram = {
type : 'Batch',
lines : 1208,
language : 'php'
};
}
6.コメント
ドキュメンテーションコメント
●関数・クラス等には以下のリファレンスを参考としてドキュメンテーションコメントを記載すること。
Google Apps Script 公式ガイド – Best practices
/**
* 指定した分数+秒数が何時間かを算出・返却するカスタム関数 … ★関数の説明
*
* @param {number} numMinute 分数 … ★引数の説明(@param {型} 説明)
* @param {number} numSecond 秒数 … ★引数の説明(@param {型} 説明)
* @return {number} 算出した時間 … ★返却値の説明(@return {型} 説明)
* @Customfunction
*/
function calcHours(numMinute, numSecond) {
let numHour = parseInt(numMinute / 60) + parseInt(numSecond / 3600);
return numHour;
}
その他
●コードを見ればわかるような内容についてのコメントは不要。
function doSomething(numTemperature) {
if (numTemperature == null) { // 引数がnull
console.log("未設定");
} else if (numTemperature >= 0) { // 引数が0以上
console.log("0以上");
} else { // 引数が0未満
console.log("0未満";
}
}
●GASのIDEでは、Ctrl + / で現在カーソルのある行や複数行の選択範囲をコメントイン・コメントアウトできる為、
「/* ~ */」によるブロックコメントよりも「//」を使用した方が使い勝手が良い場合がある。
7.比較演算子
一致・不一致の比較について
●一致・不一致の比較については、データ型も含めて厳密に比較をする「===」と「!==」を使用すること。
(演算子「==」と「!=」は左辺と右辺のデータ型が異なっていてもデータ型を変換した上で比較をする為、
データ型の差異まで含めた厳密な一致・不一致の比較にはならない)
function doSomething() {
console.log(12 == '12'); // true
console.log(12 === '12'); // false
console.log(12 != '12'); // false
console.log(12 !== '12'); // true
}
8.マジックナンバー(ハードコーディング)は禁止
●メンテナンス性を著しく損なう為、マジックナンバー(ハードコーディング)は使用禁止とする。
以下の観点には特に留意すること。
・行数、列数
・係数
・セルのアドレス
・配列やオブジェクトの要素数
・引数
・ファイル名、パス名
・パスワード
・URLやメールアドレス
function doSomething() {
let objTargetRange = SpreadsheetApp.getActiveSheet().getRange(5, 3, 11, 19); // セル範囲
let objTargetFile = DriveApp.getFileById('1U2RtRuPwD3JJzmsD_kJQAyO_66bpwRpp'); // ファイルID
MailApp.sendEmail({to: 'test@gmail.com', subject: 'test', body: 'test', htmlBody: '', from: ''}); // メールアドレス等
}
9.スクリプトの高速化(スプレッドへのアクセスについて)
共通前提
●GASでは1スクリプト辺りの実行時間制限が6分(ビジネスプランなら30分)、
一日辺りの総実行時間制限が90分(ビジネスプランなら6時間)となっている。
この為、APIのアクセス回数を減らす等して、処理速度を少しでも向上させること。
Google Apps Script 公式ガイド – Googleサービスの割り当て
配列の利用
●スプレッドシートのデータやGmailのメッセージをはじめ、GASで取り扱うデータは、
特に理由のない限りは直接操作をせずに配列に格納して処理するようにすること。
都度APIアクセスを行うより、一括でAPIアクセスして配列で処理する方が処理時間が速くなる。
●スプレッドシートで複数のセルを取り扱う場合は、getValues・setValuesを使用して、配列を利用するようにすること。
function doSomething() {
let objTargetSheet = SpreadsheetApp.getActiveSheet();
let aryTargetValues = sheet.getDataRange().getValues();
/* 中略(配列で取得したaryTargetValuesへの処理を実施) */
objTargetSheet.getRange(1, 1, aryTargetValues.length, aryTargetValues[0].length).setValues(aryTargetValues);
}
シートへのレコード追加
●シートにレコードを追加する場合は、appendRowを使うことで配列から直接レコードを追加することができる。
function doSomething() {
let objTargetSheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow(["Mick", "Keith", "Ron", "Charlie", "Brian", "Bill"]);
}
テーブル走査
●テーブルの走査をする場合には、getDataRange・getValuesを用いてデータを二次元配列として取得して操作すること。
各行・各セルで都度シートにアクセスすると遅くなる為、そのような実装は避ける。
function doSomething() {
let aryTargetValues = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
for (let i = 1; i < aryTargetValues.length; i++) {
// 各行・各セル毎の処理
}
}
シートの最終行・最終列
●シート最終行・シート最終列は、それぞれgetLastRow・getLastColumnで取得可能。
function doSomething() {
let aryTargetValues = SpreadsheetApp.getActiveSheet();
let numLastRow = sheet.getLastRow();
let numLastColumn = sheet.getLastColumn();
for (let j = 1; j <= lastRow; j++) {
for (let i = 1; i <= lastColumn; i++) {
// セル毎の処理
}
}
}
アクティブシートとシートの保護
●シートが一つのみのブックについては、getActiveSheetでシートを指定すると良い。
ユーザーがシート名を変更した場合でもコードを変更せずに動作可能であり、高速化の面でも有利となる。
●複数シートが存在するブックの場合は、getSheetByName等を使用してシートを特定する。
この場合、ユーザーがシート名を変更しないように運用するか、シート名の変更が発生する場合はコードの修正が必要となる。
●確実にシート名の変更を防止したい場合には、対象のシートを非表示にするか、シートを保護する等、干渉を受けないように対処を行うこと。
スプレッドシート上のデータはテーブル形式推奨
●スクリプトで主に操作対象となるスプレッドシートのデータは、特に理由がない限りテーブル形式とする。
getRange・getLastRow・getLastColumnといった、
GoogleAppsScriptで用意されている専用関数でのシートアクセスをスムーズに行う為にも、以下観点に留意すること。
●A1セルから構成する
●空白行・空白列を設けない
●セルの結合を使わない
●見出しは1行で構成する
●同じ種類のデータはシートを分けない
10.例外処理
●例外が発生する可能性のある処理については、try ~ catchでの制御を行うこと。
●例外catch時には、ログ出力・メッセージボックス・メール通知等で例外内容をユーザーへ通知すること。
function doExceptionHandling() {
try {
// 主処理
} catch (e) {
// 例外処理
Browser.msgBox(e);
} finally {
// 終了処理
}
}
ワードプレスを保守してるゴルフおじさんです。
今日も、ワードプレスが落ちました。。。
2021年12月3日(金)11時ごろ、
プラグインの更新が溜まっていたので、管理画面>ダッシュボード>更新でプラグインを一括更新し無事終了。
14時ごろ、仕事をしていたら、社員から、当社ホームページがエラーになっていますと報告があり、見てみると
初めて見る画面で、「WordPress のトラブルシューティングについてはこちらをご覧ください。」をクリックしページを見ても何のことかわからず、とりあえずF12でchromeのデベロッパーツールを見ると500エラーが発生中。
よく、プラグインとかワードプレスの更新中でこけてると、メンテナンス画面が出るので、FTPツールで「.maintenance」ファイルを確認したが無いことを確認。
ただ、https://www.n-sysdes.co.jp/は上記エラー画面になりますが、https://www.n-sysdes.co.jp/corporate/等の下位層のページは閲覧できます。
どういうこと!?
仕方ないので、wp-config.phpのデバッグモード(define( ‘WP_DEBUG’, false );)をtureに変更したところ、
Parse error: syntax error, unexpected ‘->’ (T_OBJECT_OPERATOR) in /virtual/119.245.141.45/ssl/home/corporate/wp-content/plugins/ninja-forms/includes/Routes/Submissions.php on line 717
ようやく犯人を見つけました^^
後は、管理画面>プラグインのNinja Formsを無効化すれば、ほら、表示されました!!
でも、このままではNinja Formsが使えない・・・
今回の教訓、ワードプレスやプラグインの更新時は、ちゃんとホームページが表示されるか確認しましょう!
エラー時のバージョンは以下の通りです。
wordpressバージョン:5.8.2
Ninja Formsバージョン:3.6.7
こんにちは!
明日、2021年4月23日に、3回目の緊急事態宣言が発令されようとしてます。
日本は、いつになったらワクチン接種できるのでしょうか。
今朝のニュースで、イスラエルでは屋外でのマスク着用義務が解除されたという話しがされており、街の様子を映してましたがみんな喜んでいました。
日本でも早く日常に戻れるといいですね。
今回は、Visual Studio CodeからSalesforce環境へログイン出来なかったことについてお話しをします。
Salesforce CLI、Visual Studio Code、Salesforce Extension Packのインストール後、Visual Studio Codeでプロジェクトを作成し、sfdx-project.json のログインURLを更新。
SFDX: Authorize an Orgで組織認証を行ったところ、ブラウザが起動しSalesforceログイン画面が表示されたのでログインしたらエラーになりました。
ID/パスワードを何度も試し、Visual Studio Codeのプロジェクトを何度も作成し直し、プロジェクト内のリソースを何度も確認しましたが、
ログインできませんでした。
普通にブラウザからログインは出来るのに、Visual Studio Codeから組織認証するとログインで失敗します。
仕方ないので、Salesforce有識者に問い合わせしたら、ログイン画面の「カスタムドメインを使用」でログインしてくださいとのこと。
試しにログインしたら、ログイン出来ました! 何で!!!
Salesforce有識者に問い合わせしても、「わからん」とのこと。
ただ、ログイン成功で組織認証もできたので、やっと、作業が再開出来ます。 くじけずに頑張ります。。。
こんにちは。親睦会のエノモトです。
今年は、1泊2日で福島県の猪苗代へ行ってきました!
寒い12月に敢えて寒い福島県を企画したのは、温泉に浸かり、美味しい料理とお酒を飲んで心身共にリフレッシュしてもらって、日頃の疲れを癒してもらいたいからです。
でも、逆にリフレッシュし過ぎて、帰りのバスでは、皆さん眠っていた方も多くいました^^;
兎に角、事故も事件もなく、無事に帰って来れましたので、皆さんお疲れ様でした!
社員旅行の模様をお伝えします。
日 程:2019年12月14日(土)~12月15(日)
場 所:猪苗代
社員旅行1日目(2019年12月14日(土))
1.本社から出発
今回は2台のバスで移動します。
2.大谷資料館を見学
まずは、栃木県宇都宮市にある、大谷資料館で見学です。
大谷資料館では、大谷石の採掘場跡が見れますが、こんなに掘ったのですか!?っていうぐらいの空洞が見れます。
この大谷資料館は、ドラマや映画の撮影場所でよく使われているみたいで、イベントや結婚式まで行われています。
この日も華道家の假屋崎省吾さんがイベントを行っていました。
まず、入口に展示コーナーがあります。
採掘場跡の入り口は、階段で下に降りていきます。
綺麗に穴が掘られています。
まるで、インディージョーンズの世界です。
3.宇都宮市の日本料理 にしきにて昼食
にしきさんにて、美味しい豚しゃぶを頂きました。
ご馳走様でした!
4.世界のガラス館 猪苗代店でエッジグラス体験
世界各国のガラス製品やオリジナルアクセサリーが展示されてます。
希望者だけですが、エッジグラス作成の体験を行いました。
5.ホテルリステル猪苗代到着
スキー場(リステルスキーファンタジア)が目の前にあり、スキーファンには最高のホテルだと思いますが、残念ながら温暖化の影響で雪が無く、営業していませんでした^^;
ただ、露天風呂はじめプールや結婚式もあげられる施設もあり、プライベートで、また来てみたいと思いました。
6.宴会(忘年会)
社長の乾杯の発声で宴会が始まりました。
社長もリラックス感満載の恰好をしてます^^;
とりあえず、2019年の忘年会ということで、みなさん、お疲れ様でした!
宴会の後は、カラオケで盛り上がりました^^
社員旅行2日目(2019年12月15日(日))
1.朝食
ビュッフェ形式での朝食です。
種類も多く、朝から食べ過ぎました^^;
2.鶴ヶ城見学
社員旅行2日目の最初の観光は、「鶴ヶ城」です。
戊辰の戦役で新政府軍の猛攻の前に籠城一ヵ月、城は落ちなかったそうですが、昭和40年に再建したそうです。
立派な城ですね!
以前放映したNHKの大河ドラマ「八重の桜」でも有名な城ですが、
案内図があったので写真を撮りました(クリックすると大きな写真で見れます)
記念撮影して、次に移動です。
3.会津酒蔵見学(末廣酒造)
末廣酒造さんに来ました。
日本酒の試飲が出来るので楽しみにしてました^^
日本酒の製造方法を教えていただいた後の末廣さんの日本酒、本当に美味しかったです。
私もお土産で買いました!
4.割烹・田季野にて昼食
末廣酒造さんの日本酒を飲んだらお腹が減ってきました。
田季野さんは「輪箱飯:Wappa-meshi」で有名なお店みたいで、この日は、会津物語【会津地そばと五種輪箱】を頂きました。
輪箱飯も美味しいですが、会津地そばには、そのままの太いネギが差し込まれています。そのネギを使ってそばを食うとのことで試してみました^^
ご馳走様でした!
5.会津若松市内散策
お腹もいっぱいになり、最後の観光は会津若松市内、レトロな七日町通りを散策しました。
歴史を感じる建物や古い町並みを見ながら会津若松を堪能しました^^
6.本社到着
2日間の旅行が終わりました。
東京に帰ります。
途中、那須高原で休憩。
最後のお土産を購入しました。
無事、東京神田にある本社に到着。
皆さん、お疲れ様でした!
こんにちは!
さて今回は、前回に紹介したstripInaccessibleメソッド、その補足記事になります。
前回は単一のオブジェクトに対する項目レベルセキュリティチェックでしたが、 何とこのメソッド、複数オブジェクトにも対応しているのです(ナ、ナンダッテー 今回はその内容を検証してみましょう。
ここで取り出したるは前回記事のコード。
public class TestCreateController {
public Account testAccount{get;set;}
public TestCreateController(){
testAccount = new Account();
}
public void save(){
//編集権限のない項目を設定する
testAccount.Disapproval__c = 'Disapproval';
System.debug('処理前: '+testAccount);
List accountList = new List{testAccount};
//項目レベルセキュリティの適用
SObjectAccessDecision decision = Security.stripInaccessible(AccessType.CREATABLE, accountList);
//処理結果の確認
for(Integer i = 0; i < accountList.size(); i++){
System.debug('処理結果: '+decision.getRecords()[i]);
}
System.debug('変更されたインデックス: '+decision.getModifiedIndexes());
System.debug('変更されたフィールド: '+decision.getRemovedFields());
}
}
これを、こうします。
public class TestCreateController {
public Account testAccount{get;set;}
public Contact testContact{get;set;}
public TestCreateController(){
testAccount = new Account();
testContact = new Contact();
}
public void save(){
//編集権限のない項目を設定する
testAccount.Disapproval__c = 'Disapproval';
testContact.Disapproval__c = 'Disapproval';
System.debug('処理前: '+testAccount);
System.debug('処理前: '+testContact);
List objList = new List{testAccount, testContact};
//項目レベルセキュリティの適用
SObjectAccessDecision decision = Security.stripInaccessible(AccessType.CREATABLE, objList);
//処理結果の確認
for(Integer i = 0; i < objList.size(); i++){
System.debug('処理結果: '+decision.getRecords()[i].isSet('Disapproval__c'));
}
System.debug('変更されたインデックス: '+decision.getModifiedIndexes());
System.debug('変更されたフィールド: '+decision.getRemovedFields());
}
}
今回の権限は前回にちょい足しして以下の通り
オブジェクト | 項目 | 権限 |
Account | Disapproval__c | 権限なし |
Contact | Disapproval__c | 権限なし |
これを実行してみますと、以下のような結果に
(ここまで読んだ方の中にisSet()が唐突に登場して混乱をきたしている方もいるかもしれませんので 念のために補足しておきます) isSetメソッドは項目に対して値が設定されているかを検証するメソッドです。 項目に対して書き込みが行われていた場合(nullを設定した場合でも)trueを、書き込みがなければfalseを返します。 今回はstripInaccessibleメソッドによって書き込みそのものがなかったことになっているのが見て取れます。 ワザマエ!
前回の内容と併せて使ってみると、複数のオブジェクトに対して1メソッドで項目レベルセキュリティの検証が 行える超便利メソッドということがわかります。 セキュリティを意識するうえで欠かせないこのメソッド、 ぜひ活用してみてください。
では、オタッシャデー!
第30回NSD杯麻雀大会(記念大会)を開催しました!
次回、記念大会の第31回NSD麻雀大会のエントリーはこちらです
こんにちは。タキ@NSD杯麻雀大会会長です。
前回第29回NSD杯麻雀大会当日の2019年8月3日(土)、全英女子オープンで渋野選手が優勝した日から3ヶ月が経ち、第30回NSD杯麻雀大会日の翌日2019年12月1日(日)にはLPGA最終戦で渋野日向子選手が後一歩というところで優勝を逃し、2019年の賞金女王は、弊社もお世話になってるSalesforceがスポンサーについてる鈴木愛選手が2年振りに返り咲きました!
ということで、ワールドラグビーも終わり、野球も終わり、ゴルフも終わり、これから寒い冬へ突入ですが、インドアで楽しめる「まーじゃん」で主にIT業界界隈の方々と交流を行いましたので報告いたします。
今回は、親子参加(子供は成人です)、女流雀士4人、初参加者7人とフレッシュな顔ぶれで24人の雀士が集まり、激しいバトルを繰り広げた模様をご報告いたします。
次回、記念大会の第31回NSD麻雀大会のエントリーはこちらです
開催概要
日 時:2019年11月30日(土)11時30分集合、12時スタート
場 所:ゴースタアネックス神田南口店 4F
天 候:晴れ(施設内なので関係ないが)
参加者:24名(6卓)
参加費:5,500円(打ち上げ参加費用等込み)
スケジュール:
11:30 集合、ルール等説明、名刺交換会
12:00 競技開始
17:00 競技終了
17:30 発表
19:00 解散
ルール概要:
■30分/回戦×8回戦(東南風戦、西・北入あり
※8回戦のみ55分の拡大版
■食いタンあり、後付けありの「アリアリ」ルール
(鳴き平和はなし、海底のみあり)
■海底(ハイテイツモ)と河底(ハイテイロン)アリ
■ドラは★2枚★、「裏ドラ」「槓ドラ」「槓裏ドラ」あり
■赤牌もドラ扱い
■全局割れ目アリ!
■ドボンなし(箱割れは借りてください、リーチは出来ます!)
■チョンボは満貫払い
■点数は25,000点持ち、30,000点返し
■ウマあり、ワンスリー(1位:30pt、2位:10pt、3位:-10pt、4位:-30pt)
■二翻縛りなし、やきとり・花牌なし。
■4回戦と最終局(8回戦)はポイント2倍!
競技開始前の集合写真です。
今回も役満(四暗刻)が出ました(><)
誰が優勝したのか・・・
順位発表
表彰式は、おいしい山形のお店 鳥海 神田店で行いました。
乾杯は、前回のブービーです^^
いよいよ結果発表です!
順位賞
4位~24位の発表です。なお、以下の人には賞品が出ました^^
入賞:4位
入賞:5位
ラッキー7賞:7位
飛び賞:10位
当月賞:11位
飛び賞:15位
飛び賞:20位
ブービー賞:23位(次回、副幹事)・・・懇親会欠席で海外へ逃亡・・・
ブービーメーカー賞:24位
特別賞
今回も予算が少なく大波賞(グロス)の1名だけです^^;
いよいよベスト3の発表です!
3位は、前回休養明けの「ミカミ」さんです。おめでとうございます!
準優勝は、ベスグロの「ナカバヤシ」さんです!おめでとうございます!
第30回NSD杯麻雀大会(記念大会)の優勝は、役満(四暗刻)をあがりネット(NSDルール)に救われた「クワムラ」さんです!
おめでとうございました!
なお、残念ながら何も賞をもらえなかった人でじゃんけんの勝者に残念賞が贈られました。
また、優勝・準優勝の予想を当てた人は優勝・準優勝の2人でした!重ねておめでとうございます!!
最後に優勝スピーチ(撮り忘れた!)と初参加の人に感想を頂きました!
また、まーじゃん大好きなな人たちは3次会へ行きました^^
次回開催予定
次回の日程は、4年に1度のうるう年にしかない2020年2月29日(土)に第31回NSD杯麻雀大会を行います。
↓ 新型コロナウィルスで、2020年2月29日(土)の第31回NSD杯麻雀大会は延期になりました。
未だ、コロナ禍ですが、2022年8月21日(日)に第31回NSD杯麻雀大会を開催します!
是非、参加のほどよろしくお願いします!
2回目の投稿となります、とーたけです。
18日にサンフランシスコ入りして、早くも4日経ちました。
3日目の夜にして始めて途中で目が覚めずスッキリ睡眠が取れました。
今日の出来事を共有。
■SalesforceTower
2018年に完成したばかりのSalesforceTowerのツアーに参加。
サンフランシスコで最も高いビルとなり、
観光名所化しており入るまで対象の時間。
今回は61階の「オハナフロア」と呼ばれる最上階と、
オフィスフロアを見学しました。
最上階は、従業員とゲストのラウンジとして利用されるそうですが、
眺めが最高です!!
360度Viewで展望できます。
お勧めの 『TeaForce 2019』 を頂きました。
Salesforceカラーですが、味の表現は難しいです。。。
その後、従業員のオフィスを見学させて頂きましたが、
非常に働きやすそうな施設が揃っており羨ましい限りです。
■ImplemtenPartnerMeetupSession
インプリメーションを中心としている日本企業向けのパートナー会参加。
「インプリの人材育成」に対する取り組みとして、
Deloitte US 様の「PathFinderProgram」の紹介がありました。
TrailHeadを利用してテクニカル部分の育成、
Deloitte独自の教育でビジネス部分の育成を実施。
当社もTrailHeadを利用した若手教育は実施しておりますが、
ビジネス部分の育成は気になるところです。
4-6ヵ月の教育期間を得てメンバーとしてスタートできるそうです。
印象ワードは、
「メンバーが多様化しているプロジェクトが成功する」
各社のグローバルでの働き方のインプットが貰えて、
良い一日となりました。
きのやんと申します。
今日もDreamforceのレポート・・ではなく、サンフランシスコの朝を走りましたので雰囲気をお伝えしたいと思います。
実は当社には「NSD走遊会」という同好会があり、
例年10月~4月は有志を募りマラソン大会に参加しています。
※たまに「同好会ブログ」にも記事が上がりますのでそちらもどうぞ
今年の10月と11月は関東地方に大きな被害を及ぼした台風の影響で大会が中止になり涙を呑みました。そのため2019/12/1(日)に開催される千葉マリンマラソンがシーズン最初のレース、というメンバーも多く、良い結果を残すためにも日々練習は欠かせません!
今回はマーケットストリートを、シビックセンター駅からまっすぐ海沿いにあるフェリービルディングまで走りました。30~40分ほどでジョギングできるほどよい距離です。今回は撮影のためiphone片手に1時間ほど走りました。
マーケットストリートは「Moscone」や「Salesorce Tower」が間近にあり、
Dreamforce期間中に頻繁に通る道です。朝はどんな風景なのか楽しみです。
スタート
日中は露店を広げている人も居るのですが、誰もいないです。
道が広いなー
この辺は日中は大混雑しているのですが、まだまだ人はいません。うーん快適!
コーヒーショップには大勢の人が。
Dreamforce参加者と思われる方も数名いらっしゃっていました。
朝早くからお疲れ様です!
このまま人が居ないのかなーと思いきや、パウエルストリート駅を過ぎたあたりから徐々に人通りが。どこの国の方かは分かりませんが、ランナーも居たので心の中であいさつして並走して海に向かいます。
ビル街でしょうか。人気はあまりなく。ランナーと並走のまま海沿いへ。
観光客と思われる人が急にたくさん!
海沿いはランナーであふれてました。
あまり馴染みのない街ということでどうなることかなと思いましたが、楽しく走ることができました。街中も悪くありませんが、走るのであれば信号機が少ない海沿いをお勧めします。
・・・
ホテルへ引き返したところ、パウエル駅そばでポリスが集まってました。
どうやらホームレスの方が倒れていた模様。目立ったケガはなさそうだけど大丈夫かな・・。
マーケットストリート沿いであれば灯りも多いし、概ね安心なように思いますが、夜間の一人歩きや、路地裏を歩く際には念のために注意した方が良さそうです。※正直、夜間のシビックセンター近辺、テンダーロイン方面(ウーバーで通った)はあまり近づきたくないなと感じました。。
いかがだったでしょう。
今回は現地をジョギングしてみた様子をお伝えしました。
まだまだ現地レポートをお伝えしていきますのでお楽しみに!
はじめまして。とーたけです。
初めてのDreamforceに参加しております。
刺激が多く楽しい時間を過ごしております。
本日は、Salesforceさんのアテンドでブースを回りましたので
紹介します。
AppExchangeチームのおすすめです。
ちなみに各社さんのブースが集まっているのが、
Moscone South の Campground となります。
まず初めに訪問したのが
【nCino(エヌシノ)】
・クラウド銀行業務を提供
・融資や口座開設等の業務
2社目が、
【Rootstock(ルートストック)】
・クラウドERPのソリューション
3社目は、
【Vlocity(ヴェロシティ)】
・業務特化したCRMを提供
・SalesforceTowerに本社があり密な連携で機能アップデート
最後は、
【DocuSign(ドキュサイン)】
・ここ数年日本でもよく耳にします
・電子署名を完全デジタル化したソリューション
・今回リリースしているネゴシエート機能は運用がすごく楽になりそう
各社さんデモも見せて頂きましたが、
私の英語力が低く画面操作をインプットに必死に理解しました。
こういった時に英語を勉強しとけばよかったと毎回後悔・・・
ということで、引き続き楽しみながら刺激を貰います!!
きのやんと申します。
Dreamforceでは一般向けのイベント以外にも様々な限定イベントが行われています。
技術者向けの情報はTwitterやfacebookでも沢山流れていますので、
当社の関わるエコシステムについて触れるのも物珍しいのではと思い、
ふんわり差し障りのない範囲でお伝えしていきたいと思います。
ちなみに2019/11/18(月)の出来事になります。
※朝にサンフランシスコ空港に降り立ち、ホテルから向かいました
〇Pre-DF19 Heroku Event for Japan Partners
こちらはSalesforce社公式のHeroku開発パートナー向けの催しものです
Salesforce様のパートナー向けのコミュニティで募集されていたイベントです。
※コミュニティの「Japan Partners(Official)」グループでは、役立つ情報が発信されていますので、通知設定を「すべての投稿にメールを送信」にしておくことをお勧めします
受付まで迎えに来ていただき来社!Heroku開発者の皆さんが普段いるオフィスで、Salesforce Westというビルです。
Salesforceタワーも大きいですが、こちらも立派です。良い景色。
中をご案内頂きましたが、リモートで開発する方も多い様子でした。バナナも常備され、エンジニアの働き方について研究が盛んな様子。
※打ち合わせスペースの謎のガネーシャが気になる
アジアンな小物もそうですが、Herokuのプロダクトは日本由来のネーミングが多いです。通りかかったエンジニアの方は『コンニチワ!』と挨拶を。こちらも負けずにこんにちは!
後日頂いたノベルティも花札ですし、なんだか親近感がわきますね。
イベントではアメリカでの有力なHeroku アドオンパートナー様の紹介が。
各社Dreamforceの期間に様々なセッションをするとのことで、Dreamforceで一番最初のセッションです!とのこと。
Herokuイベントに登壇された全ての企業様ではありませんが、伺えた企業様をご紹介します。
アドオン名も一緒とのことです。
■Cloudinary
・画像加工、画像認識、画像管理をリッチに手軽に実施できる。
→複雑なデータ加工を数秒で!
・パートナーが300社以上と豊富。
■Grax
・プライベートスペース上に置かれたデータとSalesforce上に置かれたデータを連携してくれる
・AWSやAzure、Googleクラウドなどとも接続可能。
・データのバックアップを簡単に取れるし、いつどこで変更されたかも簡単に追跡できる。
HerokuはSalesforceでカバーできない範囲をアドオンと開発で上手くデザインするのが肝心。しかし、開発ですべて済ませるのは非効率な面も多いです。そこでご紹介いただいた企業様のアドオンなどを駆使し、開発を最小限に抑え、クールな実装をするのがエンジニアの腕の見せ所です。
英語が堪能でない我々日本のパートナーはDreamforceで怯んでしまう場合も多いのですが、Salesforceさんに通訳と解説を頂きとてもためになりました。コミュニティ入ってて良かった!
いかがだったでしょう。
今回はSalesforceコミュニティで案内のあったイベントの様子をお伝えしました。
まだまだ現地レポートをお伝えしていきますのでお楽しみに!
Dreamforce20192日目の水本です。
写真ブースでほんの表紙と同じ感じで撮ってもらったやつです。なんか思ってたのと違うけど、それはモデルとしての私の問題だと思う。
Trailhead Keynote: Skill Up for the Futureを見てきました。当社で見たのは私だけなので、記事を書く権利を獲得できて幸せです。
早めに、会場に向かったので、すごく良い席です。7列目くらいかな。
「Lifelong Learning is the New Imperative」生涯学習を新たな命題としてとらえており、
・前の世代と比べると人生は15から20年長くなっている
・4.4年間が役割の平均期間
・以前と比べテクノロジーの変化が速い
また、従来の教育はとても高価で、スキルギャップを埋めようと考えている皆が利用することは難しい、なので、そのためのTrailheadとのストーリーです。
180万人以上の人が利用されているとの事。確かに、無料でスキルチェンジのための学習ができるのはとても素晴らしいです!
また、TrailheadのレンジャーになることでSouthern New Hampshire Universityでは大学の単位がもらえるとのこと。実に先進的です。
昨日の全体のKeynoteではAWSのコンテンツが追加や、Trailhead Goの発表がありましたが、
・学習に迷った時に使えるTrailhead Help Bot
・Trailhead LIVEでストリーミングで授業が受けられる
・TrailheadとTrailblazerCommunityがつながる
・先輩にいろいろ相談できるメンターシップ機能の追加
ことの話がありました。
当社も現在、まずは九州で学生にITに対する興味を持ってもらう企画を行っておりますが、学生のみでなく、多くの人材がITに興味を持ってもらい、学習する機会を作るためにもTrailheadはさらに重要なプラットフォームとなると確信いたしました。
初めまして、Salesforce導入支援を担当している、きのやんと申します。
この記事はオープニングキーノート直前の待ち時間に書いています。
いよいよ本日2019/11/19(火)からサンフランシスコでDreamforceが始まります!(日本では11/20(水))
今年は2019年11月19日(月)~11月22日(木)の4日間の日程で開催されます。
Dreamforceは
・Salesforceの新機能や新サービスの発表
・導入事例の紹介
・チャリティーイベント
・開発者向けセッション
と内容盛りだくさんのイベントです。
Salesforceに関わる方であれば、一度は足を運びたい!と
考えているイベントで、日本を含めた世界各国の方が、ここサンフランシスコに集まっています。
町中には数多くの広告と、Dreamforceのチェックインパスを付けた参加者が目につきます。
サンフランシスコの移動ではウーバーが欠かせないのですが、
移動中に「Salesforceのイベントで来たの?」「サンフラシスコを楽しんでいってね」と声をかけられ、好意的なムードを感じました。
今後、Dreamforceの様子をブログで発信していきたいと思いますので、よろしければご覧ください。