const closest = function(target, selector){
if (!(target instanceof Element)) {
target = target.parentElement;
}
if (!(target instanceof Element)) {
return null;
}
return target.closest(selector);
};
const $ = function(selector, scope = document){
return scope.querySelector(selector);
};
const $$ = function(selector, scope = document){
return Array.from(scope.querySelectorAll(selector));
};
$$('.js-num').forEach(function(input){
input.addEventListener('focus', function(){
input.setAttribute('inputmode', 'tel');
});
});
$$('input').forEach(function(input){
input.addEventListener('keydown', function(e){
if (e.key === 'Enter') {
e.preventDefault();
}
});
});
function validation(target){
const formLists = closest(target, 'ul.form_lists');
if (!formLists) {
return;
}
const btn = $('.js-btn', formLists);
let isValid = true;
$$('.js-must', formLists).forEach(function(item){
if (!isValid) {
return;
}
if (item.classList.contains('js-radio')) {
const name = item.getAttribute('name');
if (!$('input[name="' + name + '"]:checked', formLists)) {
isValid = false;
}
} else if (item.classList.contains('js-check')) {
if (!item.checked) {
isValid = false;
}
} else if (item.classList.contains('js-text')) {
if (item.value.trim() === '') {
isValid = false;
}
}
});
if (btn) {
btn.classList.toggle('peni', !isValid);
btn.disabled = !isValid;
}
}
$$('.js-form').forEach(function(item){
['change', 'keyup', 'input'].forEach(function(eventName){
item.addEventListener(eventName, function(){
validation(item);
});
});
});
$$('ul.form_lists').forEach(function(formLists){
const firstFormItem = $('.js-form', formLists);
if (firstFormItem) {
validation(firstFormItem);
}
});
function scrollAction(){
const winH = window.innerHeight;
const actLine = winH * 7 / 8;
const doneLine = winH * 1 / 8;
$$('.js-scroll').forEach(function(item){
const top = item.getBoundingClientRect().top;
item.classList.toggle('act', top < actLine);
item.classList.toggle('done', top < doneLine);
});
}
function resetCardBg(){
$$('.card_bg').forEach(function(bg){
gsap.set(bg, {
clearProps: 'transform,boxShadow'
});
});
}
const categoryMap = {
strategy: 0,
management: 1,
technology: 2
};
const categoryKeys = Object.keys(categoryMap);
let categorySwiper = null;
if ($('.js-category-swiper')) {
categorySwiper = new Swiper('.js-category-swiper', {
speed: 400,
autoHeight: true,
allowTouchMove: false,
});
window.categorySwiper = categorySwiper;
}
function updateSwiper(){
if (categorySwiper) {
categorySwiper.update();
categorySwiper.updateAutoHeight(0);
}
scrollAction();
}
window.addEventListener('scroll', scrollAction);
window.addEventListener('resize', function(){
resetCardBg();
updateSwiper();
});
scrollAction();
document.addEventListener('change', function(e){
const input = closest(e.target, 'input[name="category"]');
if (!input) {
return;
}
const category = input.value;
if (categorySwiper && categoryMap[category] !== undefined) {
categorySwiper.slideTo(categoryMap[category]);
setTimeout(function(){
updateSwiper();
}, 0);
}
});
if (categorySwiper) {
categorySwiper.on('slideChange', function(){
const activeIndex = categorySwiper.activeIndex;
const category = categoryKeys.find(function(key){
return categoryMap[key] === activeIndex;
});
if (category) {
const input = $('input[name="category"][value="' + category + '"]');
if (input) {
input.checked = true;
}
}
});
}
if (window.matchMedia('(hover: hover) and (pointer: fine)').matches) {
document.addEventListener('mousemove', function(e){
const card = closest(e.target, '.card');
if (!card || !card.classList.contains('act')) {
return;
}
const bg = $('.card_bg', card);
if (!bg) {
return;
}
const rect = card.getBoundingClientRect();
const x = e.clientX - rect.left;
const y = e.clientY - rect.top;
const centerX = rect.width / 2;
const centerY = rect.height / 2;
const rotateY = ((x - centerX) / centerX) * 8;
const rotateX = ((centerY - y) / centerY) * 8;
gsap.to(bg, {
rotateX: rotateX,
rotateY: rotateY,
z: 12,
scale: 1.02,
boxShadow: '0 16px 32px 0 hsla(222, 22%, 4%, .4)',
duration: .32,
ease: 'power3.out',
overwrite: true
});
});
document.addEventListener('mouseleave', function(e){
const card = closest(e.target, '.card');
if (!card) {
return;
}
const bg = $('.card_bg', card);
if (!bg) {
return;
}
gsap.to(bg, {
rotateX: 0,
rotateY: 0,
z: 0,
scale: 1,
boxShadow: '0 0 0 0 hsla(222, 22%, 4%, 0)',
duration: .8,
ease: 'elastic.out(1, .45)'
});
}, true);
}
function filterWords(){
const favoriteInput = $('.js-filter-favorite');
const displayInput = $('.js-filter-display');
const searchInput = $('.js-search-word');
const favoriteOnly = favoriteInput ? favoriteInput.checked : false;
const displayOnly = displayInput ? displayInput.checked : false;
const keyword = searchInput ? searchInput.value.trim().toLowerCase() : '';
$$('.js-word').forEach(function(word){
const favorite = word.getAttribute('data-favorite');
const display = word.getAttribute('data-display');
const searchText = (word.getAttribute('data-search') || '').toLowerCase();
let show = true;
if (favoriteOnly && favorite !== 'on') {
show = false;
}
if (displayOnly && display !== 'on') {
show = false;
}
if (keyword && !searchText.includes(keyword)) {
show = false;
}
word.style.display = show ? '' : 'none';
});
updateSwiper();
}
document.addEventListener('change', function(e){
if (
closest(e.target, '.js-filter-favorite') ||
closest(e.target, '.js-filter-display')
) {
filterWords();
}
});
document.addEventListener('input', function(e){
if (closest(e.target, '.js-search-word')) {
filterWords();
}
});
document.addEventListener('change', function(e){
const checkbox = closest(e.target, '.js-favorite, .js-display');
if (!checkbox) {
return;
}
const card = closest(checkbox, '.js-word');
if (!card) {
return;
}
const field = checkbox.classList.contains('js-favorite') ? 'favorite' : 'display';
const value = checkbox.checked ? 'on' : 'off';
const formData = new FormData();
formData.append('action', 'vocab_update_word');
formData.append('post_id', card.getAttribute('data-id'));
formData.append('field', field);
formData.append('value', value);
fetch(vocab.ajax_url, {
method: 'POST',
body: formData,
credentials: 'same-origin'
})
.then(function(response){
return response.json();
})
.then(function(res){
if (res.success) {
card.setAttribute('data-' + field, value);
filterWords();
}
});
});
function sortWords(section){
const list = $('.js-word-list', section);
if (!list) {
return;
}
const checkedSort = $('input[type="radio"][name^="sort_"]:checked', section);
const sort = checkedSort ? checkedSort.value : 'new';
const words = $$('.js-word', list);
words.sort(function(a, b){
const dateA = Number(a.getAttribute('data-date'));
const dateB = Number(b.getAttribute('data-date'));
if (sort === 'old') {
return dateA - dateB;
}
if (sort === 'random') {
return Math.random() - 0.5;
}
return dateB - dateA;
});
words.forEach(function(word){
list.appendChild(word);
});
updateSwiper();
}
document.addEventListener('change', function(e){
const input = closest(e.target, 'input[type="radio"][name^="sort_"]');
if (!input) {
return;
}
const section = closest(input, 'section.cards');
if (section) {
sortWords(section);
}
});
document.addEventListener('change', function(e){
const radio = closest(e.target, '.js-format');
if (!radio) {
return;
}
const formData = new FormData();
formData.append('action', 'vocab_update_setting');
formData.append('post_id', radio.getAttribute('data-post-id'));
formData.append('field', 'format');
formData.append('value', radio.value);
fetch(vocab.ajax_url, {
method: 'POST',
body: formData,
credentials: 'same-origin'
});
});
function initLogoAnimation(){
const logo = $('header .logo a');
const parts = $$('header .logo svg polygon, header .logo svg path');
if (!logo || !parts.length) {
return;
}
gsap.set(parts, {
transformOrigin: '50% 50%',
transformBox: 'fill-box',
fill: 'var(--white)',
opacity: 1
});
const bounceTl = gsap.timeline({
repeat: -1,
repeatDelay: 1.2
});
parts.forEach(function(part, index){
bounceTl.to(part, {
y: -5,
scaleX: 0.94,
scaleY: 1.1,
rotation: index % 2 === 0 ? -3 : 3,
duration: 0.32,
ease: 'power2.out'
}, index * 0.16);
bounceTl.to(part, {
y: 2,
scaleX: 1.08,
scaleY: 0.92,
rotation: 0,
duration: 0.28,
ease: 'power2.inOut'
}, index * 0.16 + 0.32);
bounceTl.to(part, {
y: 0,
scaleX: 1,
scaleY: 1,
rotation: 0,
duration: 0.7,
ease: 'elastic.out(1, .45)'
}, index * 0.16 + 0.6);
});
gsap.to(parts, {
fill: 'var(--lightblue)',
duration: 2,
stagger: {
each: 0.12,
yoyo: true,
repeat: -1
},
ease: 'sine.inOut'
});
gsap.to(parts, {
fill: 'var(--lightpurple)',
duration: 2,
stagger: {
each: 0.12,
from: 'end',
yoyo: true,
repeat: -1
},
ease: 'sine.inOut',
delay: 2
});
logo.addEventListener('mouseenter', function(){
gsap.to(parts, {
y: -4,
scale: 1.04,
duration: 0.45,
stagger: 0.05,
ease: 'power3.out'
});
});
logo.addEventListener('mouseleave', function(){
gsap.to(parts, {
y: 0,
scale: 1,
rotation: 0,
duration: 0.8,
stagger: 0.05,
ease: 'elastic.out(1, .45)'
});
});
}
-
PPM
自社の資源を投下すべき製品や、撤退すべき製品を分析するための手法。自社の製品を「花形」「問題児」「金のなる木」「負け犬」の4つに分類して分析を行う。グラフで表す際、縦軸は市場成長率、横軸は市場占有率。花形と問題児には投資を続け、金のなる木と負け犬には追加投資は不要。
Product Portfolio Management
-
デファクトスタンダード
標準の種類の1つ。特定の企業が開発した仕様が、市場で広く受け入れられたことによって事実上の標準となったもの。(※MicrosoftのExcelなど。)
de facto standard
-
ISO
国際的な規格を決める組織。(※本部はスイスのジュネーブにある。)この組織が標準化した企画の名前にはこの組織名の略称の後に番号がつく。
International Organization for Standardization
国際標準化機構
-
GDPR
EU内の個人データの保護に関する規則。企業の拠点が日本にある場合でも適用されるケースがある。基本的にはEU内に拠点がある事業者に対して適用されるものだが、EU外に拠点がある場合事業者でもEU内の個人データを取り扱う場合は適用される。
General Data Protection Regulation
一般データ保護規則
-
CSIRT
組織内のインシデント(インシデント管理:サービスを迅速に復旧させる活動)に対応する専門チーム。
Computer Security Incident Response Team
シーサート
-
HRM
ヒトを経営資源の1つと考え、人的資源を有効活用すること。(※ヒトとその他の3つの経営資源との最大の違いは、訓練や教育で価値を高めることができるところにある。)
Human Resource Management
人的資源管理
-
SDGs
CSRの1つ。持続可能な世界を実現するための17の国際目標。例えば「貧困をなくそう」や「質の高い教育をみんなに」「住み続けられる街づくり」などがある。
Sustainable Development Goals
-
CSR
企業には、お金儲けのことだけでなく、社会貢献や環境保護などの「社会的責任」を考え、それを実行していくことが求められる。事業内容が「社会的課題の解決」である必要はないが、ソーシャルビジネスを行う企業の事業内容は「社会的課題の解決」であることが必要。
Corporate Social Responsibility
企業の社会的責任
-
UPS
停電時にコンピュータに一時的に電力を供給する装置。あくまで一時的な電力の供給のため、始動した際は、早急にコンピュータをシャットダウンするなどして、作業中のデータを守ることが重要。
Uninterruptible Power Supply
無停電電源装置
-
BCP
企業活動を止めないための経営管理の手法の1つ。災害や事故などの不測の事態を想定して、事業をいかに継続するかをまとめた計画。BCMの中で策定する計画のこと。システムの二重化や分散配置、および停電に備えた自家発電装置の調達など。
Business Continuity Plan
事業継続計画
-
BCM
企業活動を止めないための経営管理の手法の1つ。災害などによって、企業活動を支える重要な情報システムに障害が発生したような場合でも企業活動を持続するための経営手法。ポイントは「事前に計画し、準備しておくこと」。
Business Continuity Management
事業継続管理
-
SLA
サービス提供者とサービス利用者との間で取り決めた「サービスレベル(サービスの品質や範囲)」を明文化した書籍。サービスの範囲と品質を明確にすることが目的。
Service Level Agreement
サービスレベル合意書
-
SLM
サービスの提供者と利用者が合意した「サービスレベル(サービスの品質や範囲)」を維持・改善するための活動。PDCAの手法を使ってサービスの維持・改善を行う。PDCAとは、Plan(計画)→Do(実行)→Check(評価)→Act(改善)の4つのプロセスを繰り返すことによって、継続的に業務を改善していく手法。
Service Level Management
サービスレベル管理
-
ITIL
ITサービスマネジメントのベストプラクティス(最良の事例)が書かれた本。実際に使われ、そして効果のあったITサービスマネジメントの事例がまとめられている。
Information Technology Infrastructure Library
-
プレシデンスダイアグラム法
作業(アクティビティ)間の依存関係を図示する手法。アローダイアグラムよりもさらに精密に作業日程を分析できる。「先行作業が開始されたら、後続作業を開始できる」などの複雑な依存関係を表現できる。
Precedence Diagramming Method
-
WBS
プロジェクトという1つの大きな作業を細かい作業単位に分割することであり、またそれを表した図。大きな作業(Work)を分割(Breakdown)することからこのような名前がついている。通常は3~4階層程度まで分割する。
Work Breakdown Structure
-
テスト駆動開発
アジャイル開発の1つであるXP(eXtreme Programming)のうちの1つ。通常はプログラムを書いた後に行う単体テストを、順序を逆にして先に行い、このテストを通るようなプログラムを書く開発手法。不具合が少なく済むというメリットがある。
Test Driven Development
-
E-R図
(※関係データベース)データの関係性を「エンティティ(実態)」と「リレーションシップ(関連)」という2つの概念を使って表した図。関係データベースを作成する際の設計図になる。(※1対1は棒で、1対多は片側矢印で、多対多は両側矢印で表す。)
Entity Relationship Diagram
-
OSS
ソースコードが公開されていて、改良や再配布が自由に行えるソフトウェア。利用者は付加価値(機能強化やサービスの充実など)をつけて、有料で販売することが可能。著作権はある。
Open Source Software
-
バスパワー
ケーブルを通して周辺装置に電力を送る方式。USBの機能の1つ。(※この機能のない入出力インターフェースのことをセルフパワーといい、こちらの場合はACアダプターなどを使って電力を別途調達する必要がある。)
Bus Power
-
CPU
コンピュータの中心で仕事をする機械。プロセッサと呼ばれることもある。性能はクロック周波数、コア、レジスタのデータサイズの3つで表される。
Central Processing Unit
中央処理装置
-
MTTR
システムの評価指標の1つである「信頼性」の1つ。修理にかかった時間、つまり、システムが稼働していなかった時間の平均値。システムの保守性を表す指標の1つ。故障時間の合計÷故障の回数。
Mean Time To Repair
平均修理時間
-
MTBF
システムの評価指標の1つである「信頼性」の1つ。故障と故障の間、つまり、システムが故障せずに正しく動いていた時間の平均値。稼働時間の合計÷故障の回数。大きくするためには定期的にシステムをメンテナンスすることが必要(予防保守)。
Mean Time Between Failures
平均故障間隔
-
RAID
複数のハードディスクを、あたかも1つのハードディスクであるかのように扱う技術。「データを複数台のハードディスク上に保存する技術」といい換えることもできる。(※RAID0からRAID6までの7つのレベルがあるが、レベルは性能の高さではなく、記録方式の違い。)
Redundant Arrays of Inexpensive Disks