約 4,451,592 件
https://w.atwiki.jp/lucier/pages/55.html
郵便番号テーブル(mtb_zip)のデータ件数は約12万8000件。 これをまともにselectしたりすると、アブナイ。 そんなときはindexをはろう。 indexは本でいうところの索引。 これがあるかないかで検索スピードの差は歴然。 そもそもインデックスって? 通常、MySQLでは、selectコマンドを実行した場合、 1レコード目から最終レコードまで、シーケンシャルに検索を行っていく。 データが大量になってくると検索速度の問題が生じる。 そこで出てくるのがインデックス。 インデックスを作成すると検索速度は劇的に改善される。 ただし、MySQLでは1000件以下のデータの場合はインデックスを作成しないほうが 速いとされている。 インデックスとは先ほども記載したとおり、 本の索引のようなもの。 索引語はアイウエオ順、あるいは、アルファベット順に並べられていて、 各々の索引語には、その索引語が登場するページ数(位置情報)が示されています。 読者はその位置情報を頼りに、ページを捲って、 目的のキーワードのある部分を読むことができるようになるという訳です。 逆に、索引がない場合、 1ページ目から順番に目的のキーワードを見つけるために本を読んでいくことの煩わしさを考えれば、 データベースにおいても、シーケンシャルに読んでいくことがいかに非効率であるかがわかりますね。 最も単純なものは、各レコードの先頭の一文字だけを用いたインデックス。 例えば、アルファベットだけで構成されているレコードの場合、 先頭の文字がa~zまでの26のグループに分割されます。 ここで、検索語keyで検索を行った場合、 先頭文字がkであるグループを検索しに行くだけでいいので、 シーケンシャルな検索に較べて、検索速度は圧倒的に速くなります。 仮に、レコード件数が10万件あったとして、そのうち、 先頭がkで始まるレコードが4,000件ならば、 単純計算で検索速度は25倍速くなるということになります。 実際には、先頭1文字ではなく、先頭5文字とか先頭10文字のインデックスを作成しておき、 B-tree(B木)と呼ばれる左右均等なツリー構造にデータを格納しておきます。 インデックスの作成と削除 create index インデックス名 on テーブル名 (フィールド名); とする方法と、tableを作成する際に、同時に create table テーブル名 (index インデックス名 (フィールド名)); とする方法があります。 同様に、alterコマンドを使って、 alter table テーブル名 add index インデックス名 (フィールド名); としても構いません。 create tableとalter tableを使用する場合は、インデックス名を省略することができます。 その場合、インデックス名はインデックスを作成するフィールド名と同じになります。 ちなみに、インデックス化できるフィールドは必ず必須フィールド(not null)でなければなりません。 また、単にフィールド名のみを入力すると、レコードの全てをインデックス化しますが、先頭何文字かまでをインデックス化したいならば、フィールド名(数字)のように指定します。 例えば、bib_tbテーブルのtitleフィールドのレコードを先頭5文字目までをインデックス化したいならば、 create index title_index on bib_tb (title(5)); とします(インデックス名はtitle_index)。 今回はmtb_zipテーブルに対し、 zipcodeを必須に変更し、 そのあとzipcodeの3桁目までをインデックス化してインデックスを作成。 create index zip_index on mtb_zip (zipcode(3)); 作成したインデックスを確認するには、showコマンドを使います。 全文インデックスについて(日本語未対応) ちょっと寄り道します。 さて、インデックスを使った検索が可能となるのは、基本的に、完全一致のselect文です。 このほか、あいまい検索(部分一致)のlike演算子を使った場合、前方一致(keyword%)であれば問題ないのですが、中央一致(%keyword%)や後方一致(%keyword)の場合は、インデックスを使用することができません。 これは、レコードの前方から一文字ずつをインデックス化しているためです。 しかし、実際の検索では、完全一致や前方一致で検索を行うことは稀であり、むしろ、レコード内のどこかに特定のキーワードを含むような検索を行うことの方が多いでしょう。 そういった場合のために、MySQLでは、全文インデックスをサポートしています。 日本語を扱うことはできませんのでご注意下さい。 また、全文インデックスはnot nullであるvarchar型かtext型のフィールドにしか適用できません。 基本構文は以下の通りです。 通常のindexを作成する場合とほとんど変わりありません。 create fulltext index インデックス名 on テーブル名 (フィールド名); create table テーブル名 (fulltext インデックス名 (フィールド名)); alter table テーブル名 add fulltext インデックス名 (フィールド名); やはり、create tableとalter tableでは、インデックス名を省略できます。 全文インデックスの検索方法は、通常の検索や通常のインデックスを用いた際とは異なります。 基本構文は以下の通りです。 select フィールド名 from テーブル名 where match (フィールド名) against ( 検索語 ); したがって、title中にjapanを含むレコードを検索する場合、 select * from bib_tb where match (title) against ( japan ); となります。 ちなみに、全文検索の場合、基本的に、適合度順出力を行います(詳しくはこちら)。 MySQLで日本語全文検索を行うためには、まず、形態素解析やN-gramによって、文字列をワードごとに分割して、スペースで区切り、さらに、16進数文字に変換したりして、あたかも日本語ではないかのように装う必要があります。 ということを、無理矢理やっちゃったエライ方もいらっしゃいます。
https://w.atwiki.jp/t-style/pages/30.html
ここを編集 Windowsばかり使っていたMac初心者の忘備録(MaxOS X対象)。 環境変数 ホームディレクトリに.bash_profileを作成。 その中にいろいろ書くことでカスタマイズできる。 どんな環境変数が設定されているかを知りたい場合は、printenvコマンドで確認する。 PATH 実行パス。ここにあるバイナリはそのままバイナリ名で実行できる。 (DY)LD_LIBRARY_PATH ライブラリパス。DYをつけた場合ダイナミックリンクライブラリ。 なお、DYLD_FALLBACK_LIBRARY_PATHはなければ読むというタイプ(変な競合を起こさないためにこっちを優先的に利用すべきかも)。 Eclipseと環境変数 EclipseというかインストールしたAppはbashの環境変数を引き継いでくれない。使い方がわからないだけだと思うが、Eclipse上からの設定方法をいまいちわからない。 これを解決する他の手段は以下。なお、2つ目は未検証。 bashからEclipseを起動する bashから起動すると、そのbashの環境変数を引き継いでくれる。これで、.bash_profileや.bashrcの設定がそのまま使える。 個人的にはbashの設定と共通化できて、Eclipseを多重起動するのにも便利なこの方法を利用している。 environment.plistを使う ホーム直下に.MacOSX/environment.plistを作り、その中に環境変数を書くとapp起動で認識してくれる模様。 詳細は ここ に書いてる。 スリープモード Macにはいくつかのスリープモードがあり、初期設定ではセーフスリープというのが使われている。 これを変えたい場合は次のようにする。 sudo pmset -a hibernatemode num 上記においてnumにはモードを表す数値を入れる。対応は以下の通り(この番号以外は不明)。 1:ディープスリープ(休止状態) 3:ハイブリッドスリープ(デフォルト) Eclipse CDT on MacOS X CDT EclipseによるC/C++開発をサポートするプラグイン。 インストール 方法1 C/C++にチューンされたEclipseを選んでダウンロードする。 方法2 通常のEclipseをダウンロード後、プラグインの自動ダウンロード機能(Help Install New Software)を使う。 eclipse/.../Indigoとかを選んで、プログラミングツールの階層をあさるとある。 boostの利用 boostのビルド ダウンロードして、bjamをつくって、bjamを実行すると終了。 パス設定(これはハマった) ヘッダとライブラリの場所をそれぞれEclipseに教える必要がある。 ヘッダは、プロジェクトのProperties Includes、 ライブラリ(ビルド用)は、プロジェクトのProperties Library PathsとLibrariesに書く。 このとき、Librariesは注意が必要。たとえば、正規表現ライブラリの場合、libboost_regex.aやlibboost_regex.dylibが実体であるが、Librariesにはboost_regexと書く。 上記までの設定でビルドができるようになる。しかし、ダイナミックライブラリを使う場合、これだけだとEclipse上からは実行できない。理由はdylibの場所がわからないため。 そこでProperties Run/Debug Settings EnvironmentでDYLD_LIBRARY_PATHを環境変数として追加しライブラリのあるディレクトリを設定する。 lで小文字を ことえりの設定にwindows風のチェックをつける。 Pythonバージョン切り替え(by MacPorts) MacPortsを使っている場合は、port selectを使う。 $ sudo port select --set python python27 MySQL with Python MySQLのインストール macportsからもインストールできるけど、最新版がdmg形式であるのでそれを ここ からダウンロード。 で、pkgファイルなどをダブルクリックしていけばインストール完了。 Pythonとの接続 インストール ネットを調べるとMySQL for Pythonというのが普及している模様。ただし、Mac上のセットアップは注意が必要。 まずはhttp //sourceforge.net/projects/mysql-python/files/からファイルをダウンロードしてくる。 readmeを読むと、setup.py buildとinstallで良さそうに見えるが、site.cfgファイルにMySQLのコンフィグファイルの場所を指定する必要がある。 ちなみに、今回の環境では、mysql_config = /usr/local/mysql/bin/mysql_configだった。 利用時の注意点 MySQLのライブラリを使うらしく、そのダイナミックライブラリへのパス(DYLD_LIBRARY_PATH)を通す必要がある。 ちなみに、今回の環境では/usr/local/mysql/lib/だった。 ツール MySQL GUI Toolsが便利。
https://w.atwiki.jp/saicron/pages/89.html
XTRACYCLE Contents XTRACYCLEContents XTRACYCLE XTRACYCLE モトクロスインターナショナル 日本で販売している 11753.jpg 11762.jpg 11767.jpg 引用 +... リージョン page top
https://w.atwiki.jp/my-sql/pages/46.html
HOME 関数 文字列関数 REPLACE REPLACE REPLACE(str,from_str,to_str) 文字列 str に含まれる文字列 from_str をすべて文字列 to_str に置換した文字列を返す。 mysql SELECT REPLACE( www.mysql.com , w , Ww ); - WwWwWw.mysql.com mysql SELECT REPLACE( あいあいうえお , い , す ); - あすあすうえお この関数はマルチバイト文字に対応している。
https://w.atwiki.jp/zerosuse/pages/23.html
練習用です ちょっとしたら消しますごめんなさい! Pとはなんぞや ぬぬぬ ぬー |あ|い|う|え|お| |か|き|く|け|こ| エ|レ|キ|マ|ン く|だ|さ|い| ひょーーー
https://w.atwiki.jp/monopowers/pages/119.html
メニュー データベースに格納した広告など、ランダムにデータを取得したいこともあります。MySQLなら、SELECTコマンドに「ORDER BY RAND()」を付加することによって、取得するデータをランダムに並べ替えることができます。 次の例ではadテーブルからSELECTコマンドでデータを取得するときに「ORDER BY RAND()」を記述しているので、このコマンドで返される広告データがランダムに切り替えられます。mysql_connect関数内のパスワードははご自分でお使いの値を設定 html head title 広告をランダムに取得する /title /head body ?php //データベースに接続する $conn = mysql_connect("localhost", "root", "********"); mysql_select_db("test", $conn); //行をランダム順で取得する $sql = "SELECT * FROM ad ORDER BY RAND() LIMIT 0, 1"; $res = mysql_query($sql, $conn); $row = mysql_fetch_array($res, MYSQL_ASSOC); echo mb_convert_encoding($row["adtext"], "SJIS", "EUC-JP"); mysql_close($conn) ? /body /html
https://w.atwiki.jp/yukemuri_chui/pages/19.html
trac設定 tracリポジトリ作成 リポジトリの追加はtracリポジトリを入れるためのフォルダを作成 sudo mkdir /var/lib/trac とか サンプルリポジトリ用のフォルダ作成 sudo mkdir /var/lib/trac/SampleProject ファイルの所有権を変更 sudo chown -R www-data www-data /var/lib/trac/SampleProject リポジトリ作成 sudo trac-admin /var/liv/trac/SampleProject initenv 質問があるので答える このときタイプミスなどしてしまうとエラーになるのでミスったらフォルダ削除して最初からリトライ 成功!までできてたら/リポジトリ/conf/init.confを編集すれば大丈夫 データベースを使うならアドレスを記入 参考に乗っているやり方はSQLiteでのみOKな書き方なので注意 MySQLだと以下のように書く mysql //trac_user trac_pass@localhost/trac trac データベース名 trac_user データベースのユーザー名 tracp_ass ユーザーのパスワード参考 リポジトリの場所 svnリポジトリがある場所を答える 今回の場合は /var/lib/svn/SampleProject 以上でリポジトリ作成完了 参考 http //discypus.jp/trac/sandbox/wiki/TracEnvironment クライアントPCからリポジトリを見れるようにする ubuntuでLANPサーバーをデフォルトでインストールした場合 設定ファイルは/etc/apache2/の中にある 基本的にhttpd.confに追加すればいい ServerNameとかはapache2.confにあるかも 先ほど作成したSampleProjectについて記述する sudo vi httpd.conf 以下追加 Location /trac SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracUriRoot "/trac" PythonOption TracEnvParentDir /var/lib/trac Location 追加したらapacheを再起動する sudo /etc/init.d/apache2 restart サーバー名がclilinだとしたら以下で追加したリポジトリが確認できるはず ポートの設定をしているならば”サーバー名:ポート”とする http //clilin/trac Tracのロゴが表示されない 今回の場合/var/lib/trac/SampleProject/conf/trac.iniを編集する [header_logo] alt = ... height = ... link = ... src = trac_banner.png ←この部分をこう修正 width = ... 認証 認証方式は2通り BasicかDigest BasicよりもDigestの方が安全性が高い Basic認証はパスワードなどが平分でネットワークを流れてしまうが、 Digest認証は暗号化するため この設定をしないとtracのページからログインをクリックしてもエラーが表示される Digest認証方法 とりあえずテストリポジトリがあるフォルダにパスワードファイルを作成する /var/lib/trac% sudo htdigest -c .htdigest AuthName username AuthName:httpd.confにパスワード設定するのと同じ名前にする username:パスワード設定したい人のID コマンド実行するとパスワードが2度聞かれるので入力する 2度目以降は sudo htdigest .htdigest AuthName username /etc/apacch2/httpd.confを編集する LocationMatch "/trac/[^/]+/login" LoadModule auth_digest_module /usr/lib/apache2/modules/mod_auth_digest.so ←認証に必要なモジュールを読込む AuthType digest ←Basic認証だったらbasic AuthName AuthName ←先ほどパスワード登録したときの名前を入力 AuthUserFile /var/lib/trac/.htdigest Require valid-user /LocationMatch 参考 http //www.y2sunlight.com/ground/?Apache2%2FB.%B4%F0%CB%DC%C7%A7%BE%DA%A4%C8%A5%C0%A5%A4%A5%B8%A5%A7%A5%B9%A5%C8%C7%A7%BE%DA tracページからzipアーカイブでダウンロードすると文字化けする 以下のファイルを修正する /usr/lib/python2.X/dist-packages/trac/versioncontrol/web/ui/changeset.py 修正箇所はzipinfo.filenameで検索して以下のように修正する zipinfo.filename = new_node.path.strip( / ).encode( utf8 ) ↓ zipinfo.filename = new_node.path.strip( / ).encode( shift_jis ) tracで添付ファイルのアップロードが出来ない
https://w.atwiki.jp/sfrontier/pages/107.html
import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Set; import oracle.jdbc.OracleDriver; /** * Oradoc.java - * @author naito */ public class Oradoc { /** host */ private String _host = "localhost"; /** port */ private String _port = "1521"; /** SID */ private String _sid = null; /** user */ private String _user = null; /** password */ private String _pass = null; public static void main( String[] args ) { try { DriverManager.registerDriver( new OracleDriver() ); Oracle oradoc = new Oradoc( args ); oradoc.start(); } catch( SQLException e ) { e.printStackTrace(); } } /** * コンストラクタ * @param args 起動引数 */ public Oradoc( String[] args ) { // 接続ストリング String str = null; // 出力先 String destDir = System.getProperty( "user.dir", "." ); // タイトル String title = "無題ドキュメント"; // ログ出力 boolean verbose = false; boolean invalid = false; String encoding = "Shift_JIS"; // 引数解析 int num = args.length; for( int i = 0; i num; i++ ) { if( agrs[ i ].equals( "-host" ) i + 1 num ) {[ _host = args[ ++i ]; } else if( agrs[ i ].equals( "-port" ) i + 1 num ) { _port = args[ ++i ]; } else if( agrs[ i ].equals( "-d" ) i + 1 num ) { destDir = args[ ++i ]; } else if( agrs[ i ].equals( "-title" ) i + 1 num ) { titile = args[ ++i ]; } else if( agrs[ i ].equals( "-verbose" ) ) { verbose = true; } else if( agrs[ i ].equals( "-invalid" ) ) { invalid = true; } else if( agrs[ i ].equals( "-encoding" ) i + 1 num ) { encoding = args[ ++i ]; } else { str = args[ i ]; } } // エラーチェック if( str == null ) { System.out.println( "Useage Oradoc User/Password@SID [-host HOSTNAME] [-port PORT] [-d DESTDIR] [-title TITLE] [-verbose] [-encoding ENCODING]" ); System.exit( 1 ); } // user/pass@SID 解析 if( str.matches( ".+/.+@.+" ) ) { int idx = str.indexOf( "/" ); _user = str.substring( 0, idx ); int idx2 = str.indexOf( "@", idx + 1 ); _pass = str.substring( idx + 1, idx2 ); _sid = str.substring( idx2 + 1 ); } // destDir, windowTitle, encoding 設定 HTMLManager.setDestDir( destDir ); HTMLManager.setWindowTitle( title ); HTMLManager.setEncoding( encoding ); // ログ出力フラグ設定 HTMLManager.setVerbose( verbose ); SQLManager.setVerbose( verbose ); SQLManager.setInvalid( invalid ); } /** * 処理を開始します。 */ private void start() { try { // ******* DB 接続 ************* Connection conn = getConnection( _host, _port, _sid, _user, _pass ); if( conn == null ) return; SQLManager.setConnection( conn ); // ******* HTML 作成 *********** // index HTMLManager.createIndexHTML(); // stylesheet HTMLManager.createStyleSheet(); // ******* ObjectList 取得 ***** // 全OBJECT のリストを取得 - [objects] ObjectItem[] objects = ( ObjectItem[] ) SQLManager.getObjects(); // OBJECT_TYPE ごとの Map Key objectType value ObjectItem の ArrayList HashMap objectTypeMap = new HashMap(); // OBJECT_TYPE ごとに振り分け for( int i = 0; i objects.length; i++ ) { String objectType = objects[ i ].objectType; ArrayList list = ( ArrayList ) objectTypeMap.get( objectType ); if( list == null ) { list = new ArrayList(); objectTypeMap.put( objectType, list ); } list.add( objects[ i ] ); } // OBJECT_TYPE のリスト - [objectTypes] Set set = objectTypeMap.keySet(); String[] objectTypes = ( String[] ) set.toArray( new String[ set.size() ] ); Arrays.sort( objectTypes ); // ******* HTML 作成 *********** // 概要 HTMLManager.createOverviewFrameHTML( objectTypes ); HTMLManager.createOverviewSummaryHTML( objectTypes ); // タイプ別 HTMLManager.createPackageFrameHTML( null, objects ); for( int i = 0; i objectTypes.length; i++ ) { ArrayList list = ( ArrayList )objectTypeMap.get( objectTypes[ i ] ); ObjectItem[] objectItems = ( ObjectItem[] ) list.toArray( new ObjectItem[ list.size() ] ); HTMLManager.createPackageFrameHTML( objectTypes[ i ], objectItems ); HTMLManager.createPackageSummaryHTML( objectTypes[ i ], objectItems ); } // ******* タイプ別処理振り分け ************* // TABLE のリストを取得 - [ table ( key tableName value TableItem ) ] HashMap tables = SQLManager.getTables(); // TABLECOLUMN のリストを取得 - [tableColumns ( key tableName value ArrayList of TableColumnItem ) ] HashMap tableColumns = SQLManager.getTableColumns(); // VIEW のリストを取得 - [views ( key tableName value TableItem ) ] HashMap views = SQLManager.getViews(); // INDEX のリストを取得 - [indexes ( key indexName value IndexItem )] HashMap indexes = SQLManager.getIndexes(); // INDEXCOLUMN のリストを取得 -[indexColumns ( key indexName value ArrayList of columnName ) ] HashMap indexColumns = SQLManager.getIndexColumns(); // SEQUENCE のリストを取得 * [ sequences ( key sequenceName value SequenceItem ) ] HashMap sequences = SQLManager.getSequences(); // PROCEDURE のリストを取得 String[] procedures = SQLManager.getProcedures(); // FUNCTION のリストを取得 String[] functions = SQLManager.getFunctions(); // PACKAGE のリストを取得 - [ packages ( key packageName value ArrayList of procedureName ) ] HashMap packages = SQLManager.getPackages(); HTMLManager.setProcedures( procedures, functions, packages ); // オブジェクト詳細 for( int i = 0; i objects.length; i++ ) { // TABLE if( objects[ i ].objectType.equals( "TABLE" ) ) { TableItem item = ( TableItem )tables.get( objects[ i ].objectName ); ArrayList list = ( ArrayList ) tableColumns.get( objects[ i ].objectName ); if( item == null || list == null ) continue; item.setObjectItem( objects[ i ] ); item.columns = ( TableColumnItem[] ) list.toArray( new TableColumnItem[ list.size() ] ); item.constraints = SQLManager.getTableConsts( objects[ i ].objectName ); HTMLManager.createTableFrameHTML( item ); } // VIEW else if( objects[ i ].objectType.equals( "VIEW" ) ) { ViewItem item = ( ViewItem ) views.get( objects[ i ].objectName ); if( item == null ) continue; item.setObjectItem( objects[ i ] ); HTMLManager.createViewFrameHTML( item ); } // SEQUENCE else if( objects[ i ].objectType.equals( "SEQUENCE" ) { SequenceItem item = ( SequenceIte ) sequence.get( objects[i].objectName ); if( item == null ) continue; item.setObjectItem( objects[ i ] ); HTMLManager.createSequenceFrameHTML( item ); } // PROCEDURE, FUNCTION else if ( objects[ i ].objectType.equals( "PROCEDURE" ) || objects[ i ].objectType.equals( "FUNCTION" ) ) { String[] source = SQLManager.getProcSource( objects[ i ].objectName, objects[ i ].objectType ); ProcArgItem[] args = SQLManager.getProcArgs( null, objects[ i ].objectName ); HTMLManager.createProcedureFrameHTML( objects[ i ], source, args ); } // PACKAGE else if ( objects[ i ].objectType.equals( "PACKAGE" ) { String[] source = SQLManager.getProcSource( objects[ i ].objectName, objects[ i ].objectType ); ArrayList list = ( ArrayList ) packages.get( objects[ i ].objectName ); if( list == null ) { HTMLManager.createPackageFrameHTML( objects[ i ], null, source ); } else { String[] procs = ( String[] ) list.toArray( new String[ list.size() ] ); HTMLManager.createPackageFrameHTML( objects[ i ], procs, source ); } } // PACKAGE BODY else if ( objects[ i ].objectType.equals( "PACKAGE BODY" ) { ArrayList list = ( ArrayList ) packages.get( objects[ i ].objectName ); String[] procs = ( String[] )list.toArray( new String[ list.size() ] ); HTMLManager.createPkgBodyFrameHTML( objects[ i ], procs ); // inner PROCEDURE HashMap sourceMap = SQLManager.getPkgProcSource( objects[ i ].objectName ); for( int j = 0; j procs.length; j++ ) { PkgProcItem item = ( PkgProcItem ) sourceMap.get( procs[ j ] ); ProcArgItem[] args = SQLManager.getProcArgs( objects[ i ].objectName, item.procName ); HTMLManager.createPkgProcFrameHTML( objects[ i ], item, args ); } } // Other else { HTMLManager.createObjectFrameHTML( objects[ i ] ); } } // ******* DB クローズ ********* if( conn != null ) { conn.close(); } } catch( SQLException e ) { e.printStrackTrace(); } catch ( IOException e ) { e.printStrackTrace(); } } /** * Oracle サーバーに接続する * @param host ホスト * @param port ポート * @param sid SID * @param user ユーザ * @param pass パスワード * @return Connection * @throws SQLException */ private Connection getConnection( String host, String port, String sid, String user, String pass ) throws SQLException { if( sid != null user != null pass != null ) { String url = "jdbc oracle thin " + user + "/" + pass + "@" + host + " " + port + " " + sid; return DriverManager.getConnection( url ); } else { return null; } } } ---- 作成日:2007/12/10 更新日:2007/12/10 ----
https://w.atwiki.jp/anisoncomposition/pages/42.html
咲 2期 OP MIRACLE RUSH 作曲 - 山口朗彦 イントロ key=Eb IV IIIm7 IIm7 I VIIb V7 サビと同じ 間奏 IV V IIIm IV IIm V I 転調(Eb D C) Aメロkey=C I V VIm I IIm IIIm IV V I V VIm I IIm V IIIm VIm IIm V I Bメロ IIIm VIm IIm V IIIm VI7 ここからkey=Ebとして IV #IVdim V サビ IV V IIIm VIm IIm IIIm IV #IVdim V (最後の1拍うっすら#IV7の裏っぽい雰囲気) IV V IIIm III7/vib VIm (ベースとメロがユニゾン。いいラインはみんなでなぞっちゃえばいいのかな) IV V IIIm VIm VIIb V 間奏と同じ 感想 イントロかっこいいな。後はカノン、3625、4536の普通な曲。 Aメロ前の転調は平行移動使って短三度下転調 VI7 - VIb(短三度上のIV)は個人的に辞書に無かったのでメモ そこからのIV #IV Vも Aメロ前の転調に似てるの探してみた taste of paradiceこいつはAメロ前でEb(I) D Db(I)で全音下転調。気持ちいい アイマスthe world is all oneこいつはBメロでEb(I) D Db(IV)で4度上転調。気持ちいい 正解はひとつ!じゃない!! 調べてないけど同じアイデア ハッピークレセント - taste of paradice って来てから注目してるけど 最近ドーンと来ないな。 ハッピークレセントはこれぞ歌物って感じがするわ。コードも普通、メロも普通 作詞家がうまいのか、作曲家がうまいのか。同じ人が作詞作曲しないなら後からやった人の功績だよな 「こっくっばん、そっちっのけでー」ってのが当時琴線に触れたわ
https://w.atwiki.jp/fumiduki1985/pages/148.html
ショートカット「Ctrl + 1」で切り替え可能。 このページのタグ一覧 Visio